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

文章介绍了在Java中如何使用replace和replaceAll方法来替换字符串内容。replace方法适用于简单替换,而replaceAll涉及正则表达式,当替换内容包含特殊字符如$时,需使用Matcher.quoteReplacement进行转义,以避免Illegalgroupreference异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值