replaceFirst () завершается ошибкой при замене на «$» - PullRequest
3 голосов
/ 02 июня 2011

Я не понимаю, почему "$" является особенным.

String str = "bla aa";
String tag = "$";
str = str.replaceFirst("aa", tag);

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1

Если я изменю тэг = "\\ $", то он работает нормально.Но почему его нужно избежать?заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 02 июня 2011

Поскольку это специальный символ регулярного выражения (в результатах речь идет о захвате групп), а replaceFirst принимает аргументы регулярного выражения.Документация недвусмысленно предупреждает вас:

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

Теперь немного подробнее о $.В шаблоне регулярных выражений это означает «конец строки».
В строке замены $g означает « g th группа».Таким образом, для регулярного выражения a([a-z]+)([0-9]+) у вас есть две группы - $1 и $2, и вы можете ссылаться на них при замене.См. объяснение здесь

0 голосов
/ 02 июня 2011

$ соответствует концу строки в регулярном выражении.Так что если вам нужен простой персонаж, вам нужно избежать этого.Вы можете найти больше на JAVA Pattern

0 голосов
/ 02 июня 2011

Заменить первым принимает регулярное выражение. Согласно шаблону javadoc $ соответствует концу строки.

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