2012-08-05 73 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