记录一个在工作中遇到的replace和replaceall的问题:java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-07 19:20:22

接手了一个项目的维护,测试的第一天测试反馈报错,发我报错信息后,根据堆栈信息找到报错位置的代码如下:

param.replaceAll("\\" + text, "<span style='color:red;'>"+text+"</span>")+"</span>");

目的是想将某些字符串用红色进行展示,即将字符串替换成html。

报错的原因是replaceAll(String regex, String replacement)第一个参数为正则表达式,在解析正则表达式的时候上面的"\\"+text不满足解析条件比如\M 不是正则表达式,所以会报错。此处用replace即可。
根本原因是没有分清楚replace和replaceAll的区别,误以为replaceAll是替换字符串中满足条件的所有字符串。
实际上:
replace和replaceAll的共同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串。

不同点是:replaceAll支持正则表达式,因此会对参数进行解析,如replaceAll("\\d", "XX"),会将数字替换成XX。而replace则不会,replace("\\d","XX")就是替换"\\d"的字符串,而不会解析为正则。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!