#java #string #replace #replaceall
#java #строка #заменить #replaceall
Вопрос:
Я сталкиваюсь со странным поведением метода replaceAll класса String.
У меня есть строковый буфер, который содержит следующие данные
keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=01}
я пишу ниже код для замены "keyRPT11=08|keyRPT19=01"
на "keyRPT11=08|keyRPT19=2"
для этого я использую приведенный ниже код
String complementaryInformation = "keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=01}";
complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08|keyRPT19=01","keyRPT11=08|keyRPT19=2");
replaceAll выдает неожиданный результат
keyRPT1={keyRPT11=01|keyRPT11=08|keyRPT19=2}|keyRPT3={keyRPT11=03|keyRPT11=08|keyRPT19=2|keyRPT8={keyRPT11=08|keyRPT19=2|keyRPT11=08|keyRPT19=2}
когда я использую метод replace, я получу правильный результат
keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=2}
Есть идеи, ребята??
Ответ №1:
Вам нужно экранировать |
символ, который имеет особое значение в регулярном выражении.
complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08\|keyRPT19=01","keyRPT11=08|keyRPT19=2");
replaceAll()
метод принимает шаблон регулярных выражений в качестве первого параметра. replace()
метод не принимает регулярное выражение в качестве параметра.
Комментарии:
1. но то же самое работает, когда я вызываю метод replace. почему это так?
2. @MahendraAthneria: смотрите ответ Рубрика.
replace
не использует регулярные выражения. Если вы не понимаете, почему два метода ведут себя по-разному, сначала обратитесь к документации .3. @Mahendra:
replaceAll()
метод принимает шаблон регулярных выражений в качестве первого параметра.replace()
метод не принимает регулярное выражение в качестве параметра.
Ответ №2:
String.replaceAll() принимает регулярное выражение, тогда как String.replace() принимает литерал.