JAVA replace和relaceAll的问题

来源:互联网 发布:数学问题搜索软件 编辑:程序博客网 时间:2024/06/05 03:29

题外话: 本人没啥写博客的习惯,不过这对于一个搞技术的人来说,不是件好事情,从这一篇开始,我会强迫自己开始写博客,把遇到的问题,或是一些关于技术的想法记录下来。

现在进入正题:

大家都知道 Java String类下的方法:replace是进行字符替换,而replaceAll是进行正则替换的。

在目前我所做的项目:代码扫描系统中,会大量用到正则和字符替换,主要是用来还原代码工程中 配置项的引用。

今天遇到这么个问题:

有个 项目组的代码在扫描xml文件的时候抛出了 java.lang.IllegalArgumentException: Illegal group reference 这个异常,很明显是在进行正则分组查找时,遇到了非法的分组。

根据异常查找到代码片段,发现 这里用到了 String.replaceAll函数,用以将xml中引用的${xx}形式的变量替换为它的真实值。
为什么其他项目的代码不会出现错误,唯独这个项目组的代码会出错呢?通过debug跟踪,发现,出现错误时,replaceAll的第二个参数,也就是需要被替换的值中包含了 xxx_$12这样的字符,原来如此:
replaceAll进行的是正则替换,而正则替换的 替换值中有个保留字符 '$',这个字符后加数字 标识正则表达式匹配到的分组编号,而我们的替换字符为 ${xxx},只有0号分组,载体换的时候 xxx_$12会去查找正则的12号分组,没有找到,自然就报错了。

0 0
原创粉丝点击