2017-05-02 213 views
1

我有一個字符串值,其中包含反斜槓字符(\)。我的目標是將其替換爲字符(_)。如何從Java中的字符串中刪除反斜線?

我做了以下按在這一問題How to remove the backslash in string using regex in Java?

String x = "2\5\2017"; x = x.replaceAll("\\\\", "_");

提供的解決方案,但我總是得到(27)作爲x值。注意:在2和7之間存在未知字符。在控制檯中,我可以將它看作一個小方塊。

+0

您是否嘗試過兩種解決方案? ('replaceAll'和'replace')。 PS:你也需要在'x'中轉義''' - >'String x =「2 \\ 5 \\ 2017」;' – AxelH

+1

在字符串中,反斜槓是一個轉義字符,意思是''2 \ 5 \ 2017「'被解釋爲4個字符,其中間的兩個ASCII值爲」5「和」201「(以八進制數字表示)。你需要在字符串文字中逃避你的反斜槓:''2 \\ 5 \\ 2017「' – 4castle

+0

@AxelH是的,我做了替換和替換,我得到了同樣的結果。字符串值來自數據庫,因此它不是硬編碼的值來添加雙斜線。 – Salman

回答

4

我覺得要重新定義你的輸入字符串:

String x = "2\\5\\2017" 

那麼x結果將是:

2_5_2017 
5

這是由你造成的不是逃避你\x"2\5\2017"),如果你的\不在x中,它會認爲\5\201oc tal將會有3位數字)將會是octal number。所以:

"2\5\2017" 

將顯示爲:

2??7 

所以你應該UNESCAPE像@Harmlezz方式。

+0

字符串值是從數據庫以「2 \ 5 \ 2017」的形式傳出的,沒有雙斜槓如何將@Harmlezz解決方案應用於此案例 – Salman

+1

@Salman是否意味着如果打印出字符串值那麼它來自Db,那麼你在控制檯中獲得'2 \ 5 \ 2017',而不是像'2 ?? 7'(就像@chengpohi提到的那樣)?在這種情況下,你的例子是有缺陷的..因爲「2 \\ 5 \\ 2017」打印爲「2 \ 5 \ 2017」.... – Plirkee

0

只需使用「\\」在您的字符串中添加「\」。然後用代之以「_」

String x = "2\\5\\2017"; x = x.replaceAll("\\\\", "_");

「\」是一個特殊的字符,看到「\」在我們的字符串,我們需要添加一個額外的「\」像「\\」在一個字符串。

瞭解更多關於Special Characters

0

正如Plirkee,AxelH和chengpohi提到的,​​原來的價值是不正確的。

我們設法從DB(2/5/2017)而不是(2 \ 5 \ 2017)獲取不同的表單,然後replaceAll工作。