Строка состоит из следующих элементов:
- Необязательная последовательность цифр ASCII.
- Последовательность строчных букв ASCII.
Iя пытаюсь выполнить разбиение в одном регулярном выражении, которое я мог бы использовать следующим образом:
String string = "123abc";
var array = string.split(...);
System.out.println(java.util.Arrays.toString(array));
// prints [123, abc]
Ближайшее регулярное выражение, к которому я пришел, следующее:
(?<=\d+)
Пример:
String string = "123abc";
var array = string.split("(?<=\\d+)");
System.out.println(java.util.Arrays.toString(array));
// prints [1, 2, 3, abc]
Технически, я мог бы сделать это без каких-либо регулярных выражений, но здесь важно сделать это с помощью регулярных выражений.
Решение, чтобы доказать, что я могу сделать это нормально:
String string = "123abc";
int i = 0;
for(; i < string.length() && Character.isDigit(string.charAt(i)); i++)
;
String[] array = {
string.substring(0, i), string.substring(i)
};
System.out.println(java.util.Arrays.toString(array));
// prints [123, abc]
Другой способ сделать это будет:
String string = "123abc";
String[] array = {
string.replaceAll("\\D", ""),
string.replaceAll("\\d", "")
};
System.out.println(java.util.Arrays.toString(array));
// prints [123, abc]
Соответствующие примеры:
In: Out:
123abc [ "123", "abc" ]
0a [ "0", "a" ]
a [ "", "a" ]