26

我有一个字符串,当我尝试运行该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 {  

如何替换 的出现"{"

4

3 回答 3

42

A{是用于范围重复的正则表达式元字符,如{min,max}. 要匹配文字{,您需要通过在它前面加上一个来转义它\\

str = str.replaceAll("\\{", "\n"); // does work
于 2011-12-13T14:48:38.160 回答
19

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

如果您想知道,implementsString会起作用。CharSequence.replace("{", "\n")

于 2011-12-13T14:52:31.997 回答
6

逃脱它:

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

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

于 2011-12-13T14:48:20.080 回答