2011-06-08 112 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查詢,而無需轉義雙引號。