解决`Illegal group reference: group index is missing`的两种方式
说明:记录使用String API的错误,报错信息如下:
java.lang.IllegalArgumentException: Illegal group reference: group index is missing
at java.util.regex.Matcher.appendReplacement(Matcher.java:819) ~[?:1.8.0_402]
at java.util.regex.Matcher.replaceAll(Matcher.java:955) ~[?:1.8.0_402]
at java.lang.String.replaceAll(String.java:2223) ~[?:1.8.0_402]
场景
在使用String的这个API,来替换字符串的时候抛出的,如下:
public static void main(String[] args) {
String str = "我对钱不感兴趣";
System.out.println(str.replaceAll("钱", "美金($)"));
}
原因是使用了美元符号($),美元符号是在底层替换的时候,是有特殊含义的,不能出现在第二个参数里;
解决
方法一
可以在替换前,使用APIMatcher.quoteReplacement
过一遍,如下:
public static void main(String[] args) {
String str = "我对钱不感兴趣";
System.out.println(str.replaceAll("钱", Matcher.quoteReplacement("美金($)")));
}
方法二
或者手动添加转义符,如下:
public static void main(String[] args) {
String str = "我对钱不感兴趣";
System.out.println(str.replaceAll("钱","美金(\\$)"));
}
两种效果一样,如果是确定的字符串,可以用方法二,手动转义,如果是不确定的,可以使用方法一;