给定一个 string/text,我怎样才能从给定的 string/text 中取出后面的每一对字母?
Given a string/text, how can I take each following pair of letters from the given string/text?
给定一个字符串,我如何取每对字母?
这里有一个例子,给定string = "asdfg",代码输出arr[as,df,g_];
给定字符串 = "asdfgghk",代码输出 arr[as,df,gg,hk].
如果字符串长度为奇数,则最后一对将是 char[i]_,(下划线)
这是我写的部分代码:
public static char
getCharFromString(String s, int index)
{
return s.charAt(index);
}
public static String[] solution(String s) {
char a, b;
String[] arr = new String[(s.length() / 2)];
for(int i = 0; i < s.length(); i+=2) {
if(s.length() % 2 == 0) {
a = getCharFromString(s, i);
b = getCharFromString(s, i + 1);
arr[i] = a + b ;
}
else {
a = getCharFromString(s, i);
b = getCharFromString(s, i + 1);
arr[i] = a + b ;
if(i == s.length()) {
b = "_";
}
}
}
return arr;
}
众多解决方案之一:
public static String[] solution(String s) {
int arrayLen = s.isEmpty() ? 1 : (int) Math.ceil(s.length() / 2.0);
String[] arr = new String[arrayLen];
for (int i = 0; i < arrayLen; i++) {
arr[i] = s.substring(Math.min(s.length(), i * 2), Math.min(s.length(), i * 2 + 2));
}
if (arr[arrayLen - 1].length() == 1) {
arr[arrayLen - 1] = arr[arrayLen - 1] + "_";
} else if (arr[arrayLen - 1].isEmpty()){
arr[arrayLen - 1] = "__";
}
return arr;
}
使用正则表达式非常容易。只需将字符串拆分为每 2 个字符,如果数组的最后一个元素缺少一个字符,则向其附加 _
。
演示:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Test
System.out.println(Arrays.toString(solution("asdfg")));
System.out.println(Arrays.toString(solution("asdfgghk")));
}
public static String[] solution(String s) {
// Split the string on every 2 characters
String[] arr = s.split("(?<=\G..)");
// If the last element of the array is short of one character, append '_' to it
if (arr.length > 1 && arr[arr.length - 1].length() != 2) {
arr[arr.length - 1] += "_";
}
return arr;
}
}
输出:
[as, df, g_]
[as, df, gg, hk]
注意: 正则表达式 (?<=\G..)
已在下面解释:
\G
断言位置在前一个匹配的末尾或第一个匹配的字符串的开头
.
匹配任何字符(行终止符除外)
给定一个字符串,我如何取每对字母?
这里有一个例子,给定string = "asdfg",代码输出arr[as,df,g_]; 给定字符串 = "asdfgghk",代码输出 arr[as,df,gg,hk].
如果字符串长度为奇数,则最后一对将是 char[i]_,(下划线)
这是我写的部分代码:
public static char
getCharFromString(String s, int index)
{
return s.charAt(index);
}
public static String[] solution(String s) {
char a, b;
String[] arr = new String[(s.length() / 2)];
for(int i = 0; i < s.length(); i+=2) {
if(s.length() % 2 == 0) {
a = getCharFromString(s, i);
b = getCharFromString(s, i + 1);
arr[i] = a + b ;
}
else {
a = getCharFromString(s, i);
b = getCharFromString(s, i + 1);
arr[i] = a + b ;
if(i == s.length()) {
b = "_";
}
}
}
return arr;
}
众多解决方案之一:
public static String[] solution(String s) {
int arrayLen = s.isEmpty() ? 1 : (int) Math.ceil(s.length() / 2.0);
String[] arr = new String[arrayLen];
for (int i = 0; i < arrayLen; i++) {
arr[i] = s.substring(Math.min(s.length(), i * 2), Math.min(s.length(), i * 2 + 2));
}
if (arr[arrayLen - 1].length() == 1) {
arr[arrayLen - 1] = arr[arrayLen - 1] + "_";
} else if (arr[arrayLen - 1].isEmpty()){
arr[arrayLen - 1] = "__";
}
return arr;
}
使用正则表达式非常容易。只需将字符串拆分为每 2 个字符,如果数组的最后一个元素缺少一个字符,则向其附加 _
。
演示:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Test
System.out.println(Arrays.toString(solution("asdfg")));
System.out.println(Arrays.toString(solution("asdfgghk")));
}
public static String[] solution(String s) {
// Split the string on every 2 characters
String[] arr = s.split("(?<=\G..)");
// If the last element of the array is short of one character, append '_' to it
if (arr.length > 1 && arr[arr.length - 1].length() != 2) {
arr[arr.length - 1] += "_";
}
return arr;
}
}
输出:
[as, df, g_]
[as, df, gg, hk]
注意: 正则表达式 (?<=\G..)
已在下面解释:
\G
断言位置在前一个匹配的末尾或第一个匹配的字符串的开头.
匹配任何字符(行终止符除外)