Почему я не могу разбить строку со знаком доллара? - PullRequest
41 голосов
/ 30 января 2010

Я хочу разбить строку, которая имеет такое содержание:

a$b$c

но когда я использую:

String data=...
data.split("$");

он не распознает $ и не разбивает строку, но когда я заменяю $ на какую-то букву, такую ​​как X, это работает. у кого-нибудь есть идея?

Ответы [ 6 ]

95 голосов
/ 30 января 2010

Функция split принимает регулярное выражение, а не строку, для сопоставления. Ваше регулярное выражение использует специальный символ - в данном случае '$' - поэтому вам нужно изменить его, чтобы экранировать этот символ:

String line = ...
String[] lineData = line.split("\\$");

Также обратите внимание, что split возвращает массив строк - строки неизменны, поэтому их нельзя изменить. Любые изменения, внесенные в строку, будут возвращены в новой строке, а оригинал не будет изменен. Отсюда lineData = line.split("\\$"); выше.

15 голосов
/ 30 января 2010

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

Знак доллара - это специальный оператор в регулярных выражениях, поэтому вы должны избежать его таким образом, чтобы получить то, что вы хотите:

String data = ...
String[] parts = data.split("\\$");

Или, если разделитель может измениться, вы можете использовать более общие слова:

String data = ...
String[] parts = data.split(java.util.regex.Pattern.quote("$"));
3 голосов
/ 30 января 2010

$ - это специальный символ в регулярных выражениях, представляющий конец строки. Чтобы соответствовать знаку доллара, используйте "\\$".

3 голосов
/ 30 января 2010

String.split () в Java принимает аргумент String, который является регулярным выражением. Символ '$' в регулярном выражении означает конец строки. Вы можете использовать escape-последовательность ("\\ $"), если вы ищете знак доллара в строке.

Источники:

Строка - Java API

Шаблон - Java API

3 голосов
/ 30 января 2010

split() использует регулярное выражение в качестве параметра. Вы должны вызвать split( "\\$" ), потому что $ является регулярным выражением для "конца строки".

0 голосов
/ 09 сентября 2014

У вас могут быть проблемы с символами uniCode для неразрывных пробелов. Попробуйте ...

String[] elements = myString.split("[\\s\\xA0]+"); //include uniCode non-breaking
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...