我有一个包含数字和字母的字符串。我希望将字符串拆分为连续的数字块和连续的字母块。
考虑字符串“34A312O5M444123A”。
我想输出:[“34”,“A”,“312”,“O”,“5”,“M”,“444123”,“A”]
我有有效的代码,看起来像:
List<String> digitsAsElements(String str){
StringBuilder digitCollector = new StringBuilder();
List<String> output = new ArrayList<String>();
for (int i = 0; i < str.length(); i++){
char cChar = str.charAt(i);
if (Character.isDigit(cChar))
digitCollector.append(cChar);
else{
output.add(digitCollector.toString());
output.add(""+cChar);
digitCollector = new StringBuilder();
}
}
return output;
}
我考虑将 str 拆分两次以获得一个包含所有数字块的数组和一个包含所有字母块的数组。然后合并结果。我回避了这一点,因为它会损害可读性。
我故意避免使用正则表达式模式来解决这个问题,因为我发现正则表达式模式是可读性的主要障碍。
- 调试器不能很好地处理它们。
- 它们打断了阅读源代码的人的流程。
- 加班正则表达式有机地成长并成为怪物。
- 它们非常不直观。
我的问题是:
- 如何提高上述代码的可读性?
- 有一个更好的方法吗?一个优雅地解决这个问题的 Util 类。
- 您在使用正则表达式和编写类似于我上面所写内容的代码之间划清界限?
- 您如何提高正则表达式的可读性/可维护性?