Как заменить скобки в строках - PullRequest
2 голосов
/ 14 февраля 2012

У меня есть список строк, которые содержат токены.
Токен:

{ARG: token_name}.

У меня также есть хэш-карта токеновгде ключ - токен, а значение - значение, которым я хочу заменить токен.

Когда я использую метод replaceAll, я получаю сообщение об ошибке:

java.util.regex.PatternSyntaxException: недопустимое повторение

Мой код похож наthis:

myStr.replaceAll(valueFromHashMap , "X"); 

, а valueFromHashMap содержит {и}.

Я получаю эту хэш-карту в качестве параметра.

Ответы [ 4 ]

6 голосов
/ 14 февраля 2012

String.replaceAll() работает с регулярными выражениями. {n,m} - это обычно повторение в регулярных выражениях.

Попробуйте использовать \\{ и \\}, если хотите сопоставить буквенные скобки.

Таким образом, замена всех открывающих скобок на X работает следующим образом:

myString.replaceAll("\\{", "X");

См. здесь , чтобы прочитать о регулярных выражениях (регулярные выражения) и о том, почему { и } являются специальными символами, которые должны быть экранированы при использовании регулярных выражений.

5 голосов
/ 14 февраля 2012

Как уже говорили другие, { - это специальный символ, используемый в шаблоне (тоже }). Вы должны избежать этого, чтобы избежать путаницы.

Бегство от них вручную может быть опасным (вы можете пропустить его и сделать свой шаблон совершенно неправильным) и утомительным (если у вас много специальных символов). Лучший способ справиться с этим - использовать Pattern.quote()


Вопросы, связанные с:

Ресурсы:

1 голос
/ 14 февраля 2012

replaceAll() принимает регулярное выражение в качестве параметра, а { - специальный символ в регулярных выражениях.Чтобы регулярное выражение обрабатывало его как обычный символ, оно должно быть экранировано \, которое должно быть экранировано снова другим \, чтобы Java могла его принять.Поэтому вы должны использовать \\{.

0 голосов
/ 27 августа 2014

Вы можете удалить фигурные скобки с помощью .replaceAll() в строке с квадратными скобками

String newString = originalString.replaceAll("[{}]", "X")

Например: newString = "ARG: token_name"

если вы хотите разделить newString на ключ и значение, вы можете использовать .split()

String[] arrayString = newString.split(":")

С помощью arrayString вы можете использовать его для своей HashMap с .put(), arrayString[0] и arrayString[1]

...