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

时间:2011-12-13 14:47:30

标签: java regex 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 {  

如何替换"{"

的出现次数

3 个答案:

答案 0 :(得分:37)

{是一个正则表达式元字符,用于范围重复{min,max}。要匹配文字{,您需要通过在\\之前将其转义:

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

答案 1 :(得分:13)

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

如果你想知道,String实施了CharSequence,那么.replace("{", "\n")就可以了。

答案 2 :(得分:5)

逃脱:

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

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