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 { 

如何替换"{"的出现?

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

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

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

如果你想知道, String实现了CharSequence ,那么.replace("{", "\n")将起作用。

逃避它:

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

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