2012-10-05 38 views
1

如果我有一些字符串如:如何知道這個Java的string.replaceAll是否被執行?

String s = "This is a string"; 

,現在我執行此操作:

s = s.replaceAll("This","What"); 

它的工作原理,其中s = 「什麼是一個字符串」

罰款,但現在如果表達式不匹配:

s = s.replaceAll("junk","What"); 

s仍然是以前的樣子,即s = "This is a string";


我想知道的,不等同這些字符串,有沒有辦法知道是否真的s.replaceAll執行某種動作或不?

+3

不需要檢查是否平等。你*可能*能夠檢查參考身份,但除非有文件證明,否則我不會依賴該參考身份。 –

+0

謝謝了! –

回答

4

會,如果你嘗試

if(s.contains("junk")) 
    s.replaceAll("junk", "What"); 
else 
    //you know it hasn't executed! 
+0

嘿小白,其實這完全符合我的情況,謝謝 –

1

你是問,如果有比使用其他s.equals(...)某種程度上它是好的,那麼答案是沒有沒有。

javadoc沒有聲明replaceAll將返回目標對象,如果沒有字符被改變,所以即使它做了,應該被視爲實現細節;即==不應該作爲一個捷徑,如果你關心可移植性。


當然,你可以測試正則表達式匹配原始字符串相匹配,並用它來確定是否會一直進行更換。但即使你知道替換已經發生,也不會告訴你替換操作是否真的改變了字符串。 (並且確定這很難......如果需要考慮替換字符串包含組引用的情況)。

0

由於replaceAll在屏幕後面使用Pattern.compile(regex).matcher(str).replaceAll(repl),因此可以使用一些Matcher方法來查明是否有更換會發生。但這取決於你希望如何使用它。你爲什麼不首先比較字符串?

相關問題