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

qq378527566 2012-06-28 07:51:18

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


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


求大神解释!!!!

能分析下replaceAll的源码更好!
...全文
215 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
请改为:

System.out.println("111111".replacel("/*", "2"));

或者:

System.out.println("111111".replacelAll(Pattern.quote("/*"), "2"));
ppamm 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

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

LengYueFengCai 2012-06-29
  • 打赏
  • 举报
回复
/*表示匹配0次或多次,在这匹配不到,相当于
System.out.println("111111".replaceAll("", "2"));所以会得到那样的结果。
/+表示匹配1次或多次,则不会替换2
brightyq 2012-06-28
  • 打赏
  • 举报
回复
字符串“111111”不包含“/”
但正则是“/*”,所以可以匹配到0个“/”,而字符串“111111”包含7个这样的位置,分别是开头、结尾、以及两个1中间的位置,这些位置最后用2来取代了。
正则换成/+结果就不一样了。
funnyone 2012-06-28
  • 打赏
  • 举报
回复
*可以表示0个/ 就是长度0啦

匹配 匹配开始位置 长度
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
qq378527566 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
/* 无非表示匹配 0个或者多个/ 很显然没有/存在 所以匹配0个
匹配的结果就是

Java code

Match 1: 0 0
Match 2: 1 0
Match 3: 2 0
Match 4: 3 0
Matc……
[/Quote]

这个。。。你讲的我完全不明白。。。

不要讲的太简略啊。既然匹配不到/,为什么会在每个字符之间添加一个替换字符?
funnyone 2012-06-28
  • 打赏
  • 举报
回复
/* 无非表示匹配 0个或者多个/ 很显然没有/存在 所以匹配0个
匹配的结果就是

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

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧