2012-08-05 87 views
1

我在保存在數據庫中的字符串存在問題,例如:"311\315_316\336_337"。它們只有一個反斜槓,這在java中是一個問題。當我嘗試使用s.replaceAll("\", "\\")時,它不起作用,因爲java編譯器將"311\315_316\336_337"字符串讀取爲"311Í_316Þ_337"java中的反斜槓

我也嘗試編碼和解碼的結果編碼"311%C3%8D_316%C3%9E_337"但解碼的結果仍然"311Í_316Þ_337"

我該如何解決一個反斜槓的問題?

我想通過這個字符串函數做一個進程分裂數字和反斜槓是分隔符,但這個問題阻止我這樣做。

+4

's.replaceAll(「\」,「\」);'不應該編譯...閱讀關於「轉義序列」的部分:http://docs.oracle.com/javase/tutorial/ java/data/characters.html – Baz 2012-08-05 14:34:12

+0

什麼讓你覺得你需要對這些數據做任何事情?您的程序不是Java編譯器,只有Java編譯器需要雙反斜線。或者是一個正則表達式,但是您不會將數據庫中的數據用作正則表達式嗎? – EJP 2012-08-05 22:54:26

回答

2

在java字符串中,反斜槓字符是一個控制字符。如果您希望在字符串中包含文字反斜槓,則必須使用另一個反斜槓進行轉義。例如"\\"

+0

好的,我該如何解決它?數據庫中的所有字符串都只有一個反斜槓? 291_293 \ 309 291_293 \ 335_336 295 \ 335_336 118_120 \ 139_140 – user1571714 2012-08-05 14:45:18

+0

@ user1571714不要試圖改變數據庫中的值。唯一需要轉義字符的部分是java代碼中的硬編碼字符串。如果字符串是從數據庫加載的,則不需要修改。保持原樣。 – Asaph 2012-08-05 14:49:53

+0

我不是故意改變數據庫的數據,但我問java中的解決方案?如何在代碼中解決它? – user1571714 2012-08-05 15:07:09

2

數據庫中的數據正常,您不必更換任何東西。

String s = "311\\315_316\\336_337"; 
System.out.println(s); // prints 311\315_316\336_337 

但是如果你從數據庫中獲取這些值,你不要有什麼做:

字符串 文字,直接在Java代碼中寫的,必須有自己的反斜槓由另一個反斜線
String s = resultSet.getString(1); 
System.out.println(s); // should print 311\315_316\336_337 
+0

問題不在System.out.println(s);但是當我將字符串傳遞給函數取決於反斜槓並將其用作分隔符但全部反斜槓消失和字符串將是「311Í_316Þ_337」 – user1571714 2012-08-05 14:57:35

+1

然後,該功能是越野車,或者不會做你認爲的事情,不知道它做了什麼,它是如何做到的,不可能告訴你應該做什麼 – 2012-08-05 18:11:15

2

在java中,反斜槓\有特殊的含義。爲了消除它,用一個反斜槓轉義\\

試試這個:

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

反斜槓消失了字符串「311 \ 315_316 \ 336_337」將是311Í_316Þ_337,s.replaceAll(「\\」,「\\\\」);這會導致應用程序崩潰,因爲字符串中沒有反斜槓:(((((( – user1571714 2012-08-05 15:30:27

+0

) (因正則表達式)兩次:它給出:s.replaceAll(「\\\\」,「\\\\\\」); – nonozor 2015-07-23 15:48:32

0

你也可以使用Unicode \ = \ u005c

例: 「文件夾\ u005cSubfolder1 \ u005cSubfolder2」

會導致字符串「文件夾\ Subfolder1 \ Subfolder2」

你可以在這裏看到完整的表:http://jrgraphix.net/r/Unicode/0020-007F

+0

爲什麼要降級?我一直使用unicode和它很好用,至少可以解釋爲什麼。 – Sobo 2012-08-05 15:11:58

+0

unju致敬downvote。如果你downvote發表評論... – Baz 2012-08-05 15:28:05

+0

抱歉沒有評論downvote - 是在趕時間。海事組織這是一個有用的評論,但不是一個答案。因此,downvote。也許我不適合於降低相關的東西 - 我的歉意。 – 01es 2012-08-05 15:40:45