2014-01-12 103 views
1

我似乎無法取代「:)」到別的東西的字符串,這裏是我的代碼:爲什麼我不能代替「:)」

if(message.contains(":)")) message = message.replaceAll(":)", replacement); 

這是錯誤:

Exception in thread "Listen" java.util.regex.PatternSyntaxException: Unmatched closing ')' 
near index 0 
:) 
^ 

我該怎麼辦?

+0

http://arsackoverflow.com/questions/9279893/how-to-replace-brackets-in-strings –

回答

8

請勿使用replaceAll();當你要替換文本字符串使用replace()

message.replace(":)", replacement) 

replaceAll()涉及regular expressions,其中)具有特殊的含義,因此錯誤。

+1

+1我討厭ppl那樣做,特別是在他們錯了的時候沒有評論的投票! – giorashc

+1

爲什麼有人會低估這一點? –

+0

非常感謝,這工作! – FFlaser

1

寫:

message.replaceAll(Pattern.quote(":)"), replacement); 

String#replaceAll接受一個正則表達式,而不是一個普通字符串。 )在正則表達式中有一個特殊的含義,使用quote會導致將:)作爲字符串:)而不是正則表達式。

如果你不想使用Pattern#quote,你應該通過\\逃脫)。請注意,轉義正則表達式由\完成,但在Java中,\寫爲\\

如果你不喜歡任何提到的,使用String#replace不接受正則表達式,你很好。

+1

@arshajii固定。謝謝。 – Maroun

+0

God ....給某人機會修復他的錯誤................ – Maroun

+2

@DoorknobofSnow使用'#'是一種常見的方法來區分類名和方法/引用方法/屬性時的屬性名稱(通常在文檔中)。 – ajp15243

2

您必須使用regexen逃脫)

message = message.replaceAll(":\\)", replacement); 

這是因爲)具有特殊的意義(捕捉組),所以你必須「告知」正則表達式,你只想要一個文字)

相關問題