Ответ 1
A {
- метасимвол регулярного выражения, используемый для повторения диапазона как {min,max}
. Чтобы соответствовать литералу {
, вам нужно сбежать от него, указав \\
:
str = str.replaceAll("\\{", "\n"); // does work
У меня есть строка, и когда я пытаюсь запустить метод 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 {
Как я могу заменить вхождения "{"
?
A {
- метасимвол регулярного выражения, используемый для повторения диапазона как {min,max}
. Чтобы соответствовать литералу {
, вам нужно сбежать от него, указав \\
:
str = str.replaceAll("\\{", "\n"); // does work
Если вы действительно собираетесь заменять отдельные символы, а не регулярные выражения (это то, что вы хотите здесь сделать), вы должны использовать .replace()
, а не .replaceAll()
. Несмотря на свое имя, .replace()
заменит ВСЕ вхождения, а не только первый.
И если вам интересно, String
реализует CharSequence
, значит .replace("{", "\n")
будет работать.
Побег:
str = str.replaceAll("\\{", "\n");
Это необходимо, так как первый аргумент replaceAll()
является регулярным выражением и {
имеет особое значение в регулярных выражениях Java (это оператор повторения, следовательно, сообщение об ошибке).