当我运行这些测试时
public class ReplacementTest {
@Test
public void testReplaceFirst() {
Assert.assertEquals("123", "12003".replaceFirst("0*", ""));
}
@Test
public void testReplaceAll() {
Assert.assertEquals("123", "12003".replaceAll("0*", ""));
}
}
testReplaceFirst
失败但testReplaceAll
次通过。为什么没有replaceFirst
匹配" 00" in" 12003"?
答案 0 :(得分:1)
您正在观察Matcher.find
逻辑的细节。要理解它,请执行下一个代码:
"12003".replaceAll("0*", "x");
您将看到下一个输出:
x1x2xx3x
匹配器尝试在目标字符串中找到模式出现的第一个位置。考虑到零匹配也是匹配(根据您的模式),它匹配1
之前的特定区域。虽然replaceAll
将在下一个地区继续工作,但replaceFirst
却不会。