2011-03-16 132 views
0

我試圖取代所有$字符在這樣

與S $字符串的一個例子的字符串表達式,另一個$ s和這裏結束。

這樣$字符被空格包圍。

我試過string.replaceAll("$", " $ "); 這會導致非法的參數異常。

當我試圖逃避$字符是這樣的:

string.replaceAll("\$", " $ "); I get an invalid escape sequence error before I even build. 

當我嘗試以下方法:

string.replaceAll("\\$", " $ "); I get an illegal argument exception again. 

最後,當我試試這個:

string.replaceAll("\\\\$", " $ "); 

它沒有影響絃樂。我知道這是愚蠢的,我只是沒有得到。任何人都可以幫忙嗎?

+0

你嘗試用替換。 – 2011-03-16 12:44:18

回答

5

你需要雙方

string.replaceAll("\\$", " \\$ "); 

第一個逃跑,將被傳遞給正則表達式的第二斜線兩條斜線。表達式然後是「\ $」,它與$符號匹配。並且你想用相同的替換它。

你要逃跑的第二個參數,以及因爲allthough它不是一個正則表達式\和$符號這裏是根據本文檔的specical情況:

注意,反斜槓()和美元符號($)替換字符串可能會導致結果不同,如果它被視爲字面替換字符串;看Matcher.replaceAll。如果需要,使用Matcher.quoteReplacement(java.lang.String)來抑制這些字符的特殊含義。

+0

這是需要擺脫困擾着我的第二個$符號。我剛看到這是一個字符串,並認爲$沒有特別的意義。謝謝您的回答。 – Elliott 2011-03-16 13:07:13

0

嘗試string.replaceAll("\\$", " \\$ ")

0

你必須在替換字符串中設置$符號的原因是因爲String#replaceAll()方法在引擎蓋下使用了Matcher#replaceAll()。直接從後者的Javadoc:

注意,反斜線(\)和 替換字符串 美元符號($)可能會導致 結果是不同的比,如果它 都被視爲一個文字 更換串。如上所述,美元符號 可視爲對捕獲的 子序列的引用,而 反斜槓用於替換替換字符串中的字面 字符。

2

如果您不需要做參數被視爲正則表達式,使用replace()而不是replaceAll()(它取代以及第一個參數出現的所有,但不把它當作正則表達式):

string.replace("$", " $ "); 
+0

這是最好的解決方案。在這種情況下不需要使用正則表達式! +1 – dacwe 2011-03-16 13:00:35