2012-10-18 121 views
9

下面的代码将设置在哪里如下面的代码将其设置为“测试”为什么replaceFirst和replaceAll会给出不同的结果?

String str = "test".replaceFirst("(.*)$","$1s"); 

我本来期望这两个操作以产生相同的结果STR为“testss”

String str = "test".replaceAll("(.*)$","$1s"); 

。有人可以解释为什么replaceAll会在字符串的末尾添加额外的s吗?

+0

试着做这个'“(。* $)”',你会得到什么? – epascarello

+0

用'“[$ 1]”'代替 - 这应该提供一些提示:) – 2012-10-18 05:33:51

+0

hmm ...(。* $)没有帮助,但[$ 1]给了我“[test] s [] s”。所以有一个空的捕获。为什么? – cgTag

回答

5

这是因为"(.*)$""test","test"和空字符串(“”)中捕获两个字符串。所以replaceAll会添加两个"s"

+0

谢谢。你说“空串”,你指的是哪一个? – cgTag

+0

@MathewFoscarini'[测试] []'< - 第二次捕获是“空字符串” – 2012-10-18 05:37:44

相关问题