replaceAll регулярное выражение Замена $ - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь заменить все символы $ в строковом выражении следующим образом:

пример строки с s $, а другой - с $ s, и вот конец.

, чтобысимволы $ окружены пробелами.

Я пытался string.replaceAll("$", " $ "); Это приводит к недопустимому исключению аргумента.

Когда я пытаюсь экранировать символ $ следующим образом:

string.replaceAll("\$", " $ ");  I get an invalid escape sequence error before I even build.  

Когда я пытаюсьследующее:

string.replaceAll("\\$", " $ ");  I get an illegal argument exception again.

Наконец, когда я пытаюсь это сделать:

string.replaceAll("\\\\$", " $ ");   

Это никак не влияет на строку.Я знаю, что это глупость, которую я просто не понимаю.Кто-нибудь может помочь здесь?

Ответы [ 4 ]

5 голосов
/ 16 марта 2011

Вам понадобятся две косые черты с обеих сторон

string.replaceAll("\\$", " \\$ ");

Первый экранирует второй слеш, который будет передан регулярному выражению. Выражение тогда "\ $", что соответствует знаку $. И вы хотите заменить его на то же самое.

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

Обратите внимание, что обратная косая черта () и знаки доллара ($) в строке замены могут привести к тому, что результаты будут отличаться от результатов, которые обрабатываются как буквенная строка замены; смотрите Matcher.replaceAll. Используйте Matcher.quoteReplacement (java.lang.String), чтобы при необходимости исключить специальное значение этих символов.

2 голосов
/ 16 марта 2011

Если вам не нужно обрабатывать параметры как регулярные выражения, используйте replace() вместо replaceAll() (он также заменяет все вхождения первого параметра, но не обрабатывает его как регулярное выражение):

string.replace("$", " $ ");
0 голосов
/ 16 марта 2011

Причина, по которой вам нужно вводить знак $ в строке замены, заключается в том, что метод String # replaceAll () использует Matcher # replaceAll () под капотом. Прямо из Javadoc последнего:

Обратите внимание, что обратная косая черта (\) и знаки доллара ($) в замена строки может привести к результаты будут отличаться, чем если бы рассматривались как буквальный замена строки. Знаки доллара могут трактоваться как ссылки на захваченное подпоследовательности, как описано выше, и обратные косые черты используются, чтобы избежать буквального символы в строке замены.

0 голосов
/ 16 марта 2011

Попробуйте string.replaceAll("\\$", " \\$ ").

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