Java разделить строку с регулярным выражением - PullRequest
2 голосов
/ 17 марта 2012

Я хочу разбить строку, установив в качестве разделителя все неалфавитные символы.

String[] word_list = line.split("[^a-zA-Z]");

Но со следующим вводом

11: 11 Hello World

word_list содержит много пустых строк перед "привет" и "миром"

Пожалуйста, скажите мне, почему.Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 марта 2012

Вот ваша строка, где каждый символ ^ показывает совпадение для [^a-zA-Z]:

11:11 Hello World
^^^^^^     ^

Метод split находит каждое из этих совпадений и в основном возвращает все подстроки между ^ персонажи.Поскольку перед любыми полезными данными есть шесть совпадений, вы получите 5 пустых подстрок, прежде чем получите строку "Hello".

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

2 голосов
/ 17 марта 2012

Потому что ваше регулярное выражение соответствует каждому отдельному не альфа-символу. Это было бы как разделение

",,,,,,Hello,World"

на запятых.

Вам понадобится выражение, совпадающее с целой последовательностью не-буквенных символов, например:

line.split("[^a-zA-Z][^a-zA-Z]*")

Я все еще думаю, что вы получите одну ведущую пустую строку с вашим примером, так как это будет похоже на разделение ",Hello,World", если запятая была вашим разделителем.

0 голосов
/ 17 марта 2012

Подойдет ли следующее?

String[] word_list = line.replaceAll("[^a-zA-Z ]","").replaceAll(" +", " ").trim().split("[^a-zA-Z]");

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

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