2011-10-14 69 views
1

我面臨String類的replaceAll方法的奇怪行爲。String的replaceAll方法的奇怪行爲

我有一個包含以下數據

keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=01} 

我下面寫代碼的字符串緩衝區,以取代"keyRPT11=08|keyRPT19=01""keyRPT11=08|keyRPT19=2"

我使用下面的代碼爲

String complementaryInformation = "keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=01}"; 

complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08|keyRPT19=01","keyRPT11=08|keyRPT19=2"); 

的replaceAll給予我意想不到的輸出

keyRPT1={keyRPT11=01|keyRPT11=08|keyRPT19=2}|keyRPT3={keyRPT11=03|keyRPT11=08|keyRPT19=2|keyRPT8={keyRPT11=08|keyRPT19=2|keyRPT11=08|keyRPT19=2} 

當我使用替換法的話,我會得到正確的輸出

keyRPT1={keyRPT11=01|keyRPT19=01}|keyRPT3={keyRPT11=03|keyRPT19=01}|keyRPT8={keyRPT11=08|keyRPT19=2} 

任何想法的傢伙?

回答

3

您需要轉義|符號,它在正則表達式中有特殊的含義。

complementaryInformation = complementaryInformation.replaceAll("keyRPT11=08\\|keyRPT19=01","keyRPT11=08|keyRPT19=2"); 

replaceAll()方法將正則表達式模式作爲第一個參數。 replace()方法不會將regex作爲參數。

+0

但同樣的工作,當我打電話替換方法。爲什麼是這樣? –

+3

@MahendraAthneria:見Rubrick的回答。 'replace'不使用正則表達式。如果您對兩種方法行爲不同的原因感到困惑,請先參閱文檔**。 –

+1

@Mahendra:'replaceAll()'方法將正則表達式作爲第一個參數。 'replace()'方法不會將regex作爲參數。 –

0

String.replaceAll()需要一個正則表達式,而String.replace()需要一個文字。

+0

感謝@Rubrick –