2010-09-24 3 views
3

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

+0

Просто указывая - количество времени, которое эта путаница занимает, вероятно, будет стоить вам больше, чем вы сэкономите, используя регулярные выражения (только для кодирования проклятой вещи) на протяжении всей вашей карьеры, если вы не будете делать много сценариев оболочки. –

+1

Я никогда не собирался использовать регулярные выражения .. чертовски API использует автоматически .. что я должен делать тогда? –

+1

К сожалению, метод 'String.split()' всегда использует регулярные выражения. Однако есть более гибкие API. – ColinD

ответ

7

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

+0

Спасибо за ответ .. is & также является особым символом? –

+0

@why: Нет, это не так. См. Http://download-llnw.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html. Вы можете использовать '\ Q ... \ E', чтобы убедиться, что' ... 'не будут интерпретироваться как специальные символы. – kennytm

+0

@ почему я должен сказать вам мое имя: http://www.regular-expressions.info/reference.html – ColinD

1

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

3

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

Iterable<String> split = Splitter.on('|').split("1|2|3|4"); 
Смежные вопросы