题目
Complete the solution so that it splits the string into pairs of two characters. If the string contains an odd number of characters then it should replace the missing second character of the final pair with an underscore (‘‘). 完成解决方案,以便将字符串拆分为两个字符对。如果字符串包含奇数个字符,则应使用下划线(’‘)替换最后一对中缺少的第二个字符
例子
StringSplit.solution(“abc”) // should return {“ab”, “c_”} StringSplit.solution(“abcdef”) // should return {“ab”, “cd”, “ef”}
分析
解法一
- 判断字符串奇偶,奇数填充
- 字符串遍历
-
解法二
写正则表达式 两个一切,最后判断奇偶是否需要填充
- 代入字符串进行切分
我的解法
public class StringSplit {
public static String[] solution(String s) {
if (s.length() % 2 != 0){
s += "_";
}
String[] arr = new String[s.length()/2];
for (int i = 0; i < s.length(); i++) {
arr[i/2] = s.charAt(i)+""+s.charAt(++i);
}
return arr;
}
}
参考解法
public class StringSplit {
public static String[] solution(String s) {
s = (s.length() % 2 == 0)?s:s+"_";
return s.split("(?<=\\G.{2})");
}
}
提升
- \G The end of the previous match
- (?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。