Разбить строку на две части с первой частью, состоящей только из цифр, а остальные? - PullRequest
0 голосов
/ 20 декабря 2018

Строка состоит из следующих элементов:

  • Необязательная последовательность цифр 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" ]

1 Ответ

0 голосов
/ 21 декабря 2018

Pattern.split () документация гласит:

Если в начале входной последовательности есть совпадение положительной ширины, то пустая ведущая подстрока включается вначало результирующего массива.Однако совпадение с нулевой шириной в начале никогда не приводит к появлению такой пустой ведущей подстроки.

Так что то, чего вы пытаетесь достичь, может оказаться невозможным с помощью регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...