使用replaceAll时注意

本文探讨了在使用Java的replaceAll方法时遇到的一些问题,特别是当替换字符串中包含特殊字符$和//时可能出现的错误及异常。文章通过三个具体的测试案例展示了这些问题,并提供了一个改进的replaceAll方法实现,以确保在进行字符串替换时能够正确处理这些特殊字符。

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

"".replaceAll(String regex, String replacement);

 

需要将replacement中的$和//分别转换成 //$////, 不然会报错或得不到预期效果.

 

Test Cases:

 

1) System.out.println("name".replaceAll("name", "$name$"));

 

   预期结果: $name$

 

   实际结果: Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
 at java.util.regex.Matcher.appendReplacement(Matcher.java:706)
 at java.util.regex.Matcher.replaceAll(Matcher.java:806)
 at java.lang.String.replaceAll(String.java:2000)
 at reflect.MailTemplate.main(MailTemplate.java:75)

 

 

 

2) System.out.println("name".replaceAll("name", " //name"));

 

  预期结果: /name

 

  实际结果: name

 

 

 

3) System.out.println("name".replaceAll("name", "name//"));

 

  预期结果: name/

 

  实际结果: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
 at java.lang.String.charAt(String.java:558)
 at java.util.regex.Matcher.appendReplacement(Matcher.java:696)
 at java.util.regex.Matcher.replaceAll(Matcher.java:806)
 at java.lang.String.replaceAll(String.java:2000)
 at reflect.MailTemplate.main(MailTemplate.java:75)

 

 

 

解决方法: 可以自己写个replaceAll方法, 例如:

 

private static String replaceAll(String str, String regex, String value){
  return str.replaceAll(regex, value == null ? "" : value.replaceAll(" ////", " ////////").replaceAll("//$", " //////$"));
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值