Java String ReplaceAll方法给出非法重复错误?

Joh*_*dep 25 java regex string replaceall

我有一个字符串,当我尝试运行该replaceAll方法时,我收到这个奇怪的错误:

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

我得到一个奇怪的错误:

Exception in thread "main" java.util.regex.PatternSyntaxException:
Illegal repetition {  
Run Code Online (Sandbox Code Playgroud)

我怎样才能替换出现的"{"

cod*_*ict 39

A {是用于范围重复的正则表达式元字符{min,max}.要匹配一个文字,{你需要通过前面的一个来逃避它\\:

str = str.replaceAll("\\{", "\n"); // does work
Run Code Online (Sandbox Code Playgroud)


fge*_*fge 15

如果你真的打算替换单个字符而不是正则表达式(这是你似乎想要在这里做的),你应该使用.replace(),而不是.replaceAll().尽管它的名称,.replace()将替换所有出现,而不仅仅是第一次出现.

如果你想知道,String工具CharSequence,那.replace("{", "\n")将工作.


NPE*_*NPE 5

逃避它:

str = str.replaceAll("\\{", "\n"); 
Run Code Online (Sandbox Code Playgroud)

这是必需的,因为第一个参数replaceAll()正则表达式,并且{在Java正则表达式中具有特殊含义(它是重复运算符,因此是错误消息).