鉴于此代码:
String replaced = "A".replaceAll(".*", "HI");
为什么replaced
包含字符串HIHI
而不是HI
我猜的?^.*
自从使用模式yield以来,它似乎与行首有关HI
,但我不明白这是为什么。
查看replaceAll javadoc:用给定的替换替换这个字符串中与给定正则表达式匹配的每个子字符串。这匹配两个子字符串:“”和“A”。你可以通过测试看到这一点
String replaced = "".replaceAll( ".*", "HI" );
这会导致打印单个“HI”
我认为这是因为.*
首先匹配整个字符串,然后匹配字符串末尾的空字符串。当然,^.*
不会匹配 "A" 末尾的空字符串,所以你最终只有一个 "HI"。
Matcher类的find方法找到“A”和“A”后面的一个空String,所以有2个替换。