Подтвердить что ты не робот

Метод Java String ReplaceAll дает недопустимую ошибку повторения?

У меня есть строка, и когда я пытаюсь запустить метод 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 {  

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

Побег:

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

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