记一次replace和replaceAll产生的小Bug

项目中需要解析的键值对格式如下:

String body = "jsondata[username]=xiaoming&jsondata[password]=12345";

然后我把没用的信息去除掉,好用于直接转成对象,然后用replaceAll:

body = body.replaceAll("jsondata[","").replaceAll("]=","=");

运行报错了:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 8
jsondata[
        ^
	at java.util.regex.Pattern.error(Pattern.java:1957)
	at java.util.regex.Pattern.clazz(Pattern.java:2550)
	at java.util.regex.Pattern.sequence(Pattern.java:2065)
	at java.util.regex.Pattern.expr(Pattern.java:1998)
	at java.util.regex.Pattern.compile(Pattern.java:1698)
	at java.util.regex.Pattern.<init>(Pattern.java:1351)
	at java.util.regex.Pattern.compile(Pattern.java:1028)
	at java.lang.String.replaceAll(String.java:2223)
	at com.leetcode.daycode.TestReplace.main(TestReplace.java:9)

原来replaceAll用的是正则匹配,[ ]在正则中时用于分组的,所以加上了转义

body = body.replaceAll("jsondata\\[","").replaceAll("\\]=","=");

可以了,替换后:

username=xiaoming&password=12345

后来项目用SonarLint扫描,提示这里只接用replace就可以,查了下原来replace也可以替换所有(原来以为replace只替换一个,replace替换所有,替换一个还有replaceFirst方法)

然后就直接用了replace,也没有测试代码

body = body.replace("jsondata\\[","").replace("\\]=","=");

后来测试反馈这里运行有问题,debug才发现replace用的不是正则,直接是字符串,然后原来的转义变为\了,所以替换不成功了

把转义去掉就OK了

就记录一下,有时候简单的方法不要想当然,还是要自己验证下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值