Странное поведение replaceAll метода String - PullRequest
1 голос
/ 14 октября 2011

Я столкнулся со странным поведением метода 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}

, когда я использую метод замены, тогда я будуполучить правильный вывод

keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=2}

Есть идеи, ребята ??

Ответы [ 2 ]

3 голосов
/ 14 октября 2011

Вам нужно экранировать символ |, который имеет особое значение в регулярном выражении.

complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08\\|keyRPT19=01","keyRPT11=08|keyRPT19=2");

replaceAll() метод принимает шаблон регулярного выражения в качестве первого параметра. replace() метод не принимает регулярное выражение в качестве параметра.

0 голосов
/ 14 октября 2011

String.replaceAll () принимает регулярное выражение, тогда как String.replace () принимает литерал.

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