Разделить строку чисел на Java с помощью регулярных выражений - PullRequest
0 голосов
/ 16 марта 2012

Я хочу использовать регулярные выражения в Java для разделения числовой строки. Я использую онлайн тестер регулярных выражений регулярное выражение правильно. Но в Java это не так.

Pattern pattern = Pattern.compile("[\\\\d]{1,4}");
String[] results = pattern.split("123456");
// I expect 2 results ["1234","56"]
// Actual results is ["123456"]

Что-нибудь мне не хватает?


Я знаю, что этот вопрос скучный. Но я хочу решить эту проблему. Ответ

Pattern pattern = Pattern.compile("[\\d]{1,4}");
String[] results = pattern.split("123456");
// Results length is 0
System.out.println(results.length);

не работает. Я должен попробовать это. Это ничего не даст по результатам. Пожалуйста, попробуйте, прежде чем ответить.

Искренне благодарю людей, которые помогли мне.


Решение:

Pattern pattern = Pattern.compile("([\\d]{1,4})");
Matcher matcher = pattern.matcher("123456");
List<String> results = new ArrayList<String>();
while (matcher.find()) {
    results.add(matcher.group(1));
}

Результаты вывода 2 ["1234", "56"]

Ответы [ 3 ]

5 голосов
/ 16 марта 2012
Pattern pattern = Pattern.compile("[\\\\d]{1,4}")

Слишком много обратной косой черты, попробуйте [\\d]{1,4} (вы должны избегать их только один раз, поэтому обратная косая черта перед d становится \\. Написанный вами шаблон на самом деле [\\d]{1,4} (буквальныйобратная косая черта или литерал d, от одного до четырех раз).

Когда Java решила добавить регулярные выражения в стандартную библиотеку, им следовало бы также добавить синтаксис литерала регулярного выражения вместо того, чтобы обувать его над строкаминечитаемое дополнительное экранирование и отсутствие проверки синтаксиса во время компиляции).

1 голос
/ 16 марта 2012

Вы не можете сделать это в одном вызове метода, потому что вы не можете указать группу захвата для разделения, которая была бы необходима, чтобы разбить на четыре части символа.

Это не "элегантно", но вы должны сначала вставить символ для разделения, а затем разделить:

String[] results = "123456".replaceAll("....", "$0,").split(",");

Вот вывод:

System.out.println(Arrays.toString(results)); // prints [1234, 56]

Обратите внимание, что вам не нужно использовать Pattern и т. Д., Поскольку String имеет метод разбивки на регулярные выражения, что приводит к решению в одну строку.

1 голос
/ 16 марта 2012

Решение:

Pattern pattern = Pattern.compile("([\\d]{1,4})");
Matcher matcher = pattern.matcher("123456");
List<String> results = new ArrayList<String>();
while (matcher.find()) {
    results.add(matcher.group(1));
}

Вывод 2 результатов ["1234", "56"]

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