Подтвердить что ты не робот

Почему я не могу разбить строку со знаком доллара?

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

a$b$c

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

String data = ...
String[] parts = data.split(java.util.regex.Pattern.quote("$"));

Ответ 3

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

Ответ 4

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

Источники:

String - API Java

Pattern - API Java

Ответ 5

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

Ответ 6

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

String[] elements = myString.split("[\\s\\xA0]+"); //include uniCode non-breaking