Java String ReplaceAll метод, выдавший ошибку недопустимого повторения? - PullRequest
24 голосов
/ 13 декабря 2011

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

String str = "something { } , op";
str = str.replaceAll("o", "\n"); // it works fine
str = str.replaceAll("{", "\n"); // does not work

и получаю странную ошибку:

Exception in thread "main" java.util.regex.PatternSyntaxException:
Illegal repetition {  

Как я могу заменить вхождения "{"?

Ответы [ 3 ]

38 голосов
/ 13 декабря 2011

A { - метасимвол регулярного выражения, используемый для повторений диапазона как {min,max}.Чтобы соответствовать буквальному символу {, вам нужно экранировать его, поставив перед ним \\:

str = str.replaceAll("\\{", "\n"); // does work
14 голосов
/ 13 декабря 2011

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

А если вам интересно, String реализует CharSequence, поэтому .replace("{", "\n") будет работать.

5 голосов
/ 13 декабря 2011

Escape it:

str = str.replaceAll("\\{", "\n"); 

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

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