解决:java.lang.IllegalArgumentException: Illegal group reference

 

当使用String中的replaceAll方法时,如果替换的值中包含有$符号时,在进行替换操作时会出现如下错误。

1 public static void main(String[] args) {
2         String text = "123456";
3         String replacement = "two$two";
4         String resultString = text.replaceAll("2", replacement);
5         System.out.println(resultString);
6     }

 

错误信息:

1 Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
2     at java.util.regex.Matcher.appendReplacement(Matcher.java:713)
3     at java.util.regex.Matcher.replaceAll(Matcher.java:813)
4     at java.lang.String.replaceAll(String.java:2189)
5     at org.jerval.test.Main.main(Main.java:17)

 

此时可以在进行替换操作前后分别对替换值中的$符号进行encode和decode操作,如下:

1 public static void main(String[] args) {
2         String text = "123456";
3         String replacement = "two$two";
4         replacement = replacement.replaceAll("\\$""RDS_CHAR_DOLLAR");// encode replacement;
5         String resultString = text.replaceAll("2", replacement);
6         resultString = resultString.replaceAll("RDS_CHAR_DOLLAR""\\$");// decode replacement;
7         System.out.println(resultString);
8     }

结果:

1 1two$two3456
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐