2014-10-03 15 views
-1

關於在Java中轉義反斜槓已有很多問題。根據我使用我可以替換字符序列或正則表達式。但是,這適用於逃避一個或兩個反斜槓。在我的情況下,我需要用4替換每個\的出現。用於選擇的Java Mysql Escape反斜槓

編輯:在下面我離開了第二個斜槓故意做出明確從1到4

String s = "X:\Test\test\test"; //to String s = "X:\\\\Test\\\\test\\\\test"; 

這樣一個會想到:

s.replace("\\","\\\\\\\\"); 

或正則表達式:

s.replaceAll("\\\\","\\\\\\\\\\\\\\\\"); 

但我無論做什麼,得到的字符串總是包含最多2個decending反斜槓\。 我沒有得到4 \\甚至更多。 似乎總是重複替換函數,直到只剩下2個反斜槓。

我真的需要連接到一個新的字符串以獲得4個反斜槓嗎?沒有辦法通過替換解決這個問題?

或者有沒有可能在mysql中搜索文件路徑? 我的數據庫存儲「X:\測試\測試」,才能夠找到它,我必須用反斜槓4逃生:

select * from f where filepath like 'X:\\\\test%' 

任何人的想法?

編輯︰我的日食不知怎的打破它,我重新啓動後,它打印4反斜槓,因爲它應該。不便之處,敬請原諒。

+1

試試這個' 「ABC \\ ABC」 .replaceAll( 「\\ u005c」,「\\\ 「) – Tirath 2014-10-03 18:12:04

+0

@Tirath仍然一樣,結果在2不是4 – gantners 2014-10-03 18:14:31

+0

對不起。但我不明白 - '結果在2不是4' – Tirath 2014-10-03 18:16:26

回答

0

這對我來說似乎是錯誤的。首先「String s =」X:\ Test \ test \ test「;」不會編譯。

二,你確定你正確地計算你的斜線嗎?

考慮以下代碼:

public static void main(String[] args) throws Exception { 
    String s = "X:\\Test\\test\\test"; 
    s = s.replace("\\", "\\\\\\\\"); 
    System.out.println(s); 
} 

這將打印以下勸慰:

X:\\\\Test\\\\test\\\\test 

如果你在運行一個IDE檢查變量獲得與\的轉義字符串它出現爲:

X:\\\\\\\\Test\\\\\\\\test\\\\\\\\test 

也許你沒有設置S =的結果s.replace()?

+0

我更新了我的問題上面,當然它不會編譯這種方式,我只是想明確從1到4的結果,抱歉混淆。 – gantners 2014-10-03 18:46:59

0

使用

"abc\\abc".replaceAll("\\u005c", "\\\\\\\\\\\\\\\\"); 

輸出

abc\\\\abc 

此外,

String s = "asdf\asdf"; //does not compile