日期:2014-05-17  浏览次数:20826 次

关于replaceAll,正则为/*,替换结果竟然是...
Java code

System.out.println("111111".replaceAll("/*", "2"));// 运行结果:2121212121212



也就是说,正则为/*时,replaceAll会将替换字符串插入到目标字符串的每一个空隙里去。。。。


求大神解释!!!!

能分析下replaceAll的源码更好!

------解决方案--------------------
/* 无非表示匹配 0个或者多个/ 很显然没有/存在 所以匹配0个 
匹配的结果就是
Java code

Match 1:             0         0
Match 2:             1         0
Match 3:             2         0
Match 4:             3         0
Match 5:             4         0
Match 6:             5         0
Match 7:             6         0

------解决方案--------------------
字符串“111111”不包含“/”
但正则是“/*”,所以可以匹配到0个“/”,而字符串“111111”包含7个这样的位置,分别是开头、结尾、以及两个1中间的位置,这些位置最后用2来取代了。
正则换成/+结果就不一样了。