2013-04-11 805 views
0

我有一個android應用程序,我必須找出我的用戶是否在字符串中輸入特殊字符'\'。但我沒有通過使用string.replaceAll()方法獲得成功,因爲Java將\識別爲字符串的結尾,而不是「結束標記」。有沒有人有如何解決這個問題的建議? 這是一個例如我如何試圖做到這一點:Android''特殊字符

private void ReplaceSpecial(String text) { 
    if (text.trim().length() > 0) { 
    text = text.replaceAll("\", "%5C"); 
} 

它不起作用,因爲Java不允許我有什麼建議

+3

\是特殊字符也,所以你要關閉他,使用\\ – 2013-04-11 14:13:45

+0

這不是一個'android'功能。這是Java語言 – Andremoniy 2013-04-11 14:14:51

回答

2

text = text.replaceAll("\", "%5C");

應該是:?

text = text.replaceAll("\\\\", "%5C");

爲什麼?

由於反斜槓是轉義字符。如果你想表示一個真正的反斜槓,你應該使用雙\\\

現在的replaceAll的第一個參數是正則表達式。所以你也需要逃避這個! (最後會有4個反斜槓)。

或者您可以使用replace想到一個正則表達式,所以你可以做:

text = text.replace("\\", "%5C");

3

試試這個:你必須使用轉義字符 '\'

text = text.replaceAll("\\\\", "%5C"); 
2

replaceAll的第一個參數被解釋爲正則表達式,因此實際上需要四個反斜槓:

text = text.replaceAll("\\\\", "%5C"); 

字符串文字中的四個反斜槓表示實際String中的兩個反斜槓,反過來表示匹配單個反斜槓字符的正則表達式。

或者,使用replace而不是replaceAll,如Pshemo所推薦的那樣,它將第一個參數視爲文字字符串而不是正則表達式。

+0

的功能它對我有用!非常感謝! – user1517951 2013-04-11 14:18:06

+0

@ user1517951如果此答案解決了您的問題,您應該[接受它](http://meta.stackexchange.com/a/5235/186652)。還有一些[以前的問題](http://stackoverflow.com/users/1517951/user1517951?tab=questions)也有解決你的問題的答案。試着接受他們。 – Pshemo 2013-04-11 14:35:25

1

首先,由於「\」是Java中的轉義字符,因此您需要使用兩個反斜槓才能獲得一個反斜槓。其次,由於replaceAll()方法將正則表達式作爲參數,因此您還需要將該反斜槓轉義。因此,你需要使用

text = text.replaceAll("\\\\", "%5C"); 
3

逃脫它嘗試

text = text.replaceAll("\\\\", "%5C"); 

replaceAll使用正則表達式語法,其中\是特殊字符,所以你需要逃避它。要做到這一點,你需要通過\\到正則表達式引擎,而是創建一個表示字符串的正則表達式\\你需要把它寫成"\\\\"\也是特殊字符的字符串,需要另一種逃避每個\


爲了避免你可以使用replace這個表達式爛攤子這是工作於文字

text = text.replace("\\", "%5C"); 
+1

+1,用於推薦'replace'而不是'replaceAll' – 2013-04-11 14:18:20