У меня есть строка, которая содержит цифры и буквы. Я хочу разбить строку на смежные куски цифр и смежные куски букв.Помогите лучше разбирать цифры из строки в Java
Рассмотрите строку "34A312O5M444123A".
Я хотел бы выход: [ "34", "A", "312", "O", "5", "М", "444123", "А"]
меня код, который работает и выглядит следующим образом:
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;
}
Я считал ул расщепляющий дважды, чтобы получить массив, содержащий все числа ломти и массив, содержащий все буквы куски. Затем слияние результатов. Я уклонился от этого, так как это навредило бы читаемости.
Я намеренно избегаю решения этой проблемы с помощью шаблона регулярных выражений, поскольку я считаю, что шаблоны регулярных выражений являются основным препятствием для удобочитаемости.
- Отладчики плохо справляются с ними.
- Они прерывают поток кого-то, читающего исходный код.
- Регулярное выражение регулярного выражения Overtime вырастает органично и становится монстрами.
- Они глубоко не интуитивно понятны.
Мои вопросы:
- Как я мог улучшить читаемость кода выше?
- Есть ли лучший способ сделать это? Класс Util, который решает эту проблему элегантно.
- Где вы рисуете линию между использованием regEx и кодированием чего-то близкого к тому, что я написал выше?
- Как повысить читабельность/поддерживаемость regExes?
Обратите внимание, что ваш код в письменном виде превращает строку в «[34, A, 312, O, 5, M,, N,, I, 444123, A]», это не то, что вы говорите, что ожидаете , Я собирался опубликовать исправленный код, но Йоханнес Рёссел избил меня лучшим ответом. –
слово, хороший catch. –