鉴于此代码:
String replaced = "A".replaceAll(".*", "HI");
为什么replaced
包含字符串HIHI
而不是HI
,因为我猜对了?似乎它与行的开头有关,因为使用模式^.*
会产生HI
,但我没有理由这样做。
答案 0 :(得分:5)
查看replaceAll javadoc:将此字符串的每个子字符串替换为给定替换的给定正则表达式。 这匹配两个子串:“”和“A”。 您可以通过测试
来看到这一点String replaced = "".replaceAll( ".*", "HI" );
导致单个“HI”被打印
答案 1 :(得分:5)
我认为这是因为.*
首先匹配整个字符串,然后匹配字符串末尾的空字符串。当然,^.*
与“A”末尾的空字符串不匹配,因此最终只有一个“HI”。
答案 2 :(得分:0)
Matcher类的find方法在“A”之后找到“A”和空字符串,因此有2个替换。
答案 3 :(得分:0)
replaceAll
方法将regex和replacement参数视为(read more): -
public String replaceAll(String regex,
String replacement)
在此示例中,.*
表示正则表达式。
.
表示任何字符(可能与行终止符匹配也可能不匹配)
*
表示零次或多次(Read More regexp)
您给定代码的输出是正确的。正则表达式与*
的匹配意味着零次或多次。它会影响结果。
String replaced = "A".replaceAll(".*", "HI");
输出: - HIHI
希望它会对你有所帮助。