问题描述
给出一个字符串,我该如何接受每对字母?
这里是一个示例,给定字符串=“ asdfg”,代码输出arr [as,df,g_]; 给定字符串=“ asdfgghk”,代码将输出arr [as,df,gg,hk]。
如果字符串长度为奇数,则最后一对将为char [i] _(下划线)
这是我编写的代码的一部分:
APPT_DATE APPT_TIME
------------- ------------
NOV 06,2020 10:45 AM
NOV 06,2020 11:30 AM
解决方法
众多解决方案之一:
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,gg,hk]
注意:正则表达式(?<=\\G..)
的说明如下:
-
\G
在上一场比赛的末尾或首场比赛的字符串开头断言位置 -
.
匹配任何字符(行终止符除外)