Разделение строки в Java - PullRequest
3 голосов
/ 25 сентября 2010

Когда я разделяю строку "1|2|3|4", используя String.split("|"), я получаю 8 элементов в массиве вместо 4. Если я использую "\\|", результат будет правильным.Я предполагаю, что в этом есть что-то связанное с регулярными выражениями.Кто-нибудь может объяснить это?

Ответы [ 3 ]

7 голосов
/ 25 сентября 2010

Ты прав.| - специальный символ для чередования.Регулярное выражение | означает «пустая строка или пустая строка».Таким образом, он будет разделен вокруг всех пустых строк, в результате 1 элемент для каждого символа в строке.Экранирование \| делает его нормальным персонажем.

3 голосов
/ 25 сентября 2010

Если вы хотите разбить строку без использования регулярных выражений, я бы порекомендовал класс Splitter из Guava .Он может разбиваться на фиксированные строки, регулярные выражения и многое другое.

Iterable<String> split = Splitter.on('|').split("1|2|3|4");
1 голос
/ 25 сентября 2010

| равно OR в синтаксисе регулярных выражений Java, в основном, разделение 1|2|3|4 на | равносильно указанию String#split() «разбить эту строку между пустым ИЛИ пустым ), что означает он разделяется после каждого символа в исходной строке.

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