2014-01-15 39 views
1

我有一個字符串"123.0"並使用"123.0".matches("(\\.)?0*$")來檢查它是否有任何尾隨零,但它不匹配。相同的正則表達式正確地匹配字符串@http://regexpal.com/Java string.match/string.replace與正確的表達式不匹配

如果我想只用其他的替換最後的零,那麼如何?說與string.replace:

更換(CharSequence的目標,爲CharSequence替換) - 替換此字符串與指定的文字替換序列字面目標序列匹配的每個子字符串。

"123.0".replace("(\\.)?0*$", "")它不會取代最後的「.0」。

回答

1

java.lang.String.matches方法匹配整個字符串,而不是其中的一部分。 (不需要指定^$)。

所以,你的模式字符串應該是:

"\\d+\\.?0*" 

Demo

根據問題編輯UPDATE

您shoudl使用replaceAll代替replacereplace不接受正則表達式。它從字面上解釋第一個參數。

"123.0".replaceAll("\\.0*$", "") 
+0

如何與string.replace? – markovuksanovic

+0

謝謝,這工作。 – markovuksanovic

+0

@markovuksanovic,不客氣。 – falsetru

1

不像大多數其它語言,Java的比賽需要整個字符串匹配,所以你必須添加一個領先.*到您的正則表達式:

if (str.matches(".*\\.0+")) 

請注意,你的正則表達式似乎有點不對 - 一切都是可選的,所以它會匹配任何東西。試試這個正則表達式。

而且,因爲它有整個字符串,^匹配和$隱含的(如果你想他們的代碼 - 它沒有什麼區別)

+2

這甚至會匹配'a.0' – thefourtheye

+0

以及String.replace。我已經通過澄清更新了這些問題。 – markovuksanovic

+0

@thefourtheye是的,就像OP的正則表達式一樣。如果問題中的代碼(他沒有驗證輸入,只是測試它是否以零結尾),這個正則表達式最接近意圖。 – Bohemian