我有一个字符串,当我尝试运行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 {
如何替换"{"
?
答案 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正则表达式中具有特殊含义(它是重复运算符,因此错误信息)。