java使用replaceAll处理字符串报异常错误:Illegal group reference

Java处理替换字符串,

第一种,用replace方法:

String t = "您的验证码为{1},5分钟内有效,请勿泄露!{2}";
String s = t.replace("{1}", "{$var}").replace("{2}", "{$var}");
System.out.println(s);

这种方法很好理解,就是一个替换固定的字符,但是如果替换的内容不固定,可以用正则替换。

第二种,用replaceAll方法,

//正常情况下这样写就可以了,但是这个代码不行,这是一个错误示范
//原因就是因为,替换的字符中出现了$符号这种特殊字符
String t = "{1}您的验证码为{2},5分钟内有效,请勿泄露!{3}";
String s = t.replaceAll("\\{\\d+\\}", "{$var}");
System.out.println(s);
//这种写法会报错:Illegal group reference

错误原因是:

String的replaceAll(regex, replacement)方法的第一个参数支持正则表达式,如果参数replacement中出现符号“$”,会按照$12 的 分 组 模 式 进 行 匹 配 ; 当 编 译 器 发 现 “ 2的分组模式进行匹配;当编译器发现“2的分组模式进行匹配;当编译器发现“”后跟的不是整数的时候,就会抛出“Illegal group reference”的异常

解决方法:
java.util.regex.Matcher.quoteReplacement 对$字符进行转义再replaceAll即可
正确写法:

String t = "{1}您的验证码为{2},5分钟内有效,请勿泄露!{3}";
String s = t.replaceAll("\\{\\d+\\}", "{\\$var}");
System.out.println(s);

猜你喜欢

转载自blog.csdn.net/zlfjavahome/article/details/131251927