2012-10-18 119 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

相關問題