解决`Illegal group reference: group index is missing`的两种方式

0 阅读1分钟

说明:记录使用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("钱","美金(\\$)"));
    }

两种效果一样,如果是确定的字符串,可以用方法二,手动转义,如果是不确定的,可以使用方法一;

首次发布

hezhongying.blog.csdn.net/article/det…