Java中的String ReplaceAll方法出现了非法重复错误?

27

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

43

{ 是用于匹配重复次数范围的正则表达式元字符,如 {min,max}。如果要匹配字面意义上的 { ,需要在前面添加转义符 \\

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

20

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

如果你有疑问,String 实现了 CharSequence,所以.replace("{", "\n") 将会生效。


天啊...我使用Groovy已经好多年了,一直以为replace()只是替换第一个实例。这就是我没有查看文档的下场! - Daniel Black

6

转义它:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接