2011-06-08 107 views
50

可能重复:
In Java, is there a way to write a string literal without having to escape quotes?逃生双引号在Java中

private static final String CREATE_TABLE_EXHIBITORS = "CREATE TABLE "users" ("_id" text PRIMARY KEY ,"name" text,"body" text,"image" text,"stand_id" text,"begin" long,"end" long,"changedate" long,"website" text,"facebook" text,"myspace" text,"twitter" text,"festivallink" text,"favorite" integer);"; 

比方说,我想这个查询是Java中的有效字符串。我是否必须将其转换为在前面以斜线格式转义所有双引号?

e.g. = "CREATE TABLE \"users"\ 

还是有更快的方法来使整个查询一次有效的字符串?我以为你可以在整个字符串周围使用单引号来做到这一点,但那也行不通。

+3

在这个sql语句中不会单引号是否有效?在这种情况下不需要转义... – Gryphius 2011-06-08 11:24:34

+0

SQL中由单引号包围的字符串是字符串文字,即数据,而由双引号包围的字符串是标识符,即表名称列名等。列名称周围的双引号仅对列那些与SQL关键字不一致的名称,如DATE,NUMBER,COMMENT等 – BertNase 2011-06-08 11:27:30

+0

您使用的是什么IDE?例如在eclipse中,您可以更改设置以自动转义字符串文字。 – 2011-06-08 11:37:35

回答

42

使用反斜杠转义双引号是在Java中执行此操作的唯一方法。

身边有这样一些的IDE为IntelliJ IDEA为此粘贴这样的字符串为一个字符串文字(即围绕一个Java字符串字面双引号之间)时逃逸自动

另外一个选择是把字符串到一些一种文本文件,你会然后在运行时读取

50

使用Java的replaceAll(String regex, String replacement)

例如,使用替代焦炭的报价,然后替换字符与\"

String newstring = String.replaceAll("%","\""); 

\\\"

String newstring = String.replaceAll("\"","\\\""); 
+0

这些参数可能是相反的 – 2011-06-08 11:26:02

+1

他希望将字符串直接放入源代码中,这需要引号才能被转义以作为有效的可编译字符串文字 – BertNase 2011-06-08 11:31:13

+3

'String.replaceAll(“\”“,Matcher。quoteReplacement(“\\\”“))' – idelvall 2017-01-17 16:10:02

0

取代的\"所有实例是,你将有一个反斜杠逃脱所有的双引号。

3

对于字符串常量,除了通过反斜杠转义外,别无选择。

也许你觉得MyBatis这个项目很有意思。它是JDBC上的一个薄层,您可以在XML配置文件中外部化SQL查询,而无需转义双引号。