赞
踩
1.使用replaceFirst方法或者replaceAll方法替换时,吐过替换成为的字符串中含有"$",则会抛出标题中的异常。
2.使用replace方法替换时,会替换成功。
- String fieldName = "?progressUrl";
- String replacement = "$";
- System.out.println(fieldName.replace("?", replacement));
- System.out.println(fieldName.replaceFirst("\\?",replacement));
- System.out.println(fieldName.replaceAll("\\?",replacement));
ps:replace方法的第一个参数为target,replaceFirst和replaceAll方法的第一个参数为regex(正则)
1.查看replaceFirst方法的源码
2.替换成的对象replacement不为null,所以走下面逻辑,进入appendReplacement方法中
3.在appendReplacement方法中nextChar=“$”,所以走到红框中的if中,抛出异常
1.查看replaceAll方法的源码
2.result为true,进入if中,也遇到了appendReplacement方法
3. 进入到appendReplacement方法中,走和replaceFist相同的逻辑,同样抛出标题中异常
1.查看replace()源码,内部调用了replaceAll()
所以思考,使用replaceFirst和replaceAll时候也采用replace内部的实现方式
2.进入到replaceAll中,发现会自动给replacement前面添加"\"
将代码调整为:Matcher.quoteReplacement(replacement),以上问题解决。
- String fieldName = "?progressUrl";
- String replacement = "$";
- System.out.println(fieldName.replace("?", replacement));
- // System.out.println(fieldName.replaceFirst("\\?",replacement));
- // System.out.println(fieldName.replaceAll("\\?",replacement));
-
- System.out.println(fieldName.replaceFirst("\\?", Matcher.quoteReplacement(replacement)));
- System.out.println(fieldName.replaceAll("\\?",Matcher.quoteReplacement(replacement)));
输出结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。