java.util.regex.PatternSyntaxException: Illegal repetition {

问题描述

使用 replaceAll 替换字符串时,报如下错误:

java.util.regex.PatternSyntaxException: Illegal repetition
{"
    at java.util.regex.Pattern.error(Pattern.java:1924)
    at java.util.regex.Pattern.closure(Pattern.java:3104)
    at java.util.regex.Pattern.sequence(Pattern.java:2101)
    at java.util.regex.Pattern.expr(Pattern.java:1964)
    at java.util.regex.Pattern.compile(Pattern.java:1665)
    at java.util.regex.Pattern.<init>(Pattern.java:1337)
    at java.util.regex.Pattern.compile(Pattern.java:1022)
    at java.lang.String.replaceAll(String.java:2162)12345678910

代码为:

String s = allData.replaceAll("{\"","{'")1
问题原因

参数传递问题,replaceAll(String regex, String replacement) 方法的第一个参数为正则表达式,而 “{ ” 是正则表达式中的特殊字符,要匹配 {,需要转义后使用,replaceAll 方法源码如下:

public String replaceAll(String regex, String replacement) {
   return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}123
解决方法

对“{ ”转义即可:

String s = allData.replaceAll("\\{\"","{'")1