Java regex - разделить строку с ведущими специальными символами - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь разбить строку, содержащую пробелы и специальные символы. Строка начинается со специальных символов. Когда я запускаю код, первый элемент массива представляет собой пустую строку.

String s = ",hm  ..To?day,.. is not T,uesday.";
String[] sArr = s.split("[^a-zA-Z]+\\s*");

Ожидаемый результат ["hm", "To", "day", "is", "not", "T", "uesday"]

Может кто-нибудь объяснить, как это происходит?

Фактический результат: ["", "hm", "To", "day", "is", "not", "T", "uesday"]

Ответы [ 2 ]

3 голосов
/ 09 июля 2019

Разделение ведет себя, как и ожидалось, отщепляя строку нулевой длины в начале до первой запятой.

Чтобы исправить, сначала удалите все разделительные символы из начала:

String[] sArr = s.replaceAll("^([^a-zA-Z]*\\s*)*", "").split("[^a-zA-Z]+\\s*");

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

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

1 голос
/ 09 июля 2019

Я бы упростил его, сделав его двухэтапным процессом, а не пытался выполнить операцию регулярного выражения split():

s.replaceAll( '[^a-zA-Z]+', ' ' ).trim().split( ' ' )
...