[英]Triple quotes in Java like Scala
在 Scala 你可以這樣做:
val expr = """ This is a "string" with "quotes" in it! """
Java里面有這樣的嗎? 我討厭使用"\""
來表示帶引號的字符串。尤其是在 JSON 中組成鍵/值對時。惡心!
除了使用\\"
在字符串文字中包含雙引號之外,沒有其他好的選擇。
有一些不好的選擇:
"
,雙引號字符的 Unicode 轉義符。 編譯器將 Unicode 轉義視為鍵入該字符。 它被視為源代碼中的雙引號字符,結束/開始String
文字,因此這不起作用。'"'
,例如"This is a " + '"' + "string"
。 這會起作用,但它似乎比僅使用\\"
更丑陋且可讀性更差。char
34 以表示雙引號字符,例如"This is a " + (char) 34 + "string"
。 這會起作用,但更不明顯的是您試圖在字符串中放置雙引號字符。"This is a “string” with “quotes” in it!"
. 這些不是相同的字符(Unicode U+201C 和 U+201D); 它們有不同的外觀,但它們會起作用。我想隱藏“惡心”,你可以把它隱藏在一個常數后面。
public static final String DOUBLE_QUOTE = "\"";
然后你可以使用:
String expr = " This is a " + DOUBLE_QUOTE + "string" + DOUBLE_QUOTE + ...;
它比其他選項更具可讀性,但它仍然不是很可讀,並且仍然很難看。
Java 中沒有"""
機制,所以使用轉義\\"
是最好的選擇。 它是最易讀的,也是最不難看的。
自 Java 13預覽功能
它不能以 Scala 的方式精確地工作。 開頭的三重引號必須后跟一個新行。
var expr = """
This is a 1-line "string" with "quotes" and no leading spaces in it! """;
關閉三重引號的位置很重要。 它定義了縮進大小。 例如,要縮進 2 個空格,請按如下方式定位結束符"""
:
String sql = """
SELECT emp_id, last_name
FROM postgres.employee
WHERE city = 'INDIANAPOLIS'
ORDER BY emp_id, last_name;
""";
這將導致 4 行文本:
SELECT emp_id, last_name
FROM postgres.employee
WHERE city = 'INDIANAPOLIS'
ORDER BY emp_id, last_name;
逃脫:
三重引號轉義很直觀:
String txt = """
A text block with three quotes \""" inside.""";
注意:此功能是預覽,因此您不能在 Java 13 中使用它,除非您設置--enable-preview TextBlock
鍵。
更新:該功能使用 Java 14進入第二個預覽版 (JEP 368) 。
將等待 Java 15。
在做同樣的事情時發現了這個問題:組合小的文字 JSON 字符串以進行快速測試。 沒有出現的一種替代方法是使用雙單引號並用雙引號替換它們,例如:
String json = "{ ''label'' : ''set range'', ''min'' : 0, ''max'' : 100}".replace("''", "\"")
顯然,如果有常規的雙單引號,這將不起作用,但這種可能性應該很小。 這不是一個很好的解決方案,但看起來比很多反斜杠更好,imo。 作為將 json 放在單獨文件中的中間步驟,這可能還不錯。
三重報價功能自Java 14起可用。 有關更多詳細信息,請參見例如https://howtodoinjava.com/java14/java-text-blocks/
您想要的功能稱為Text Blocks
,並在 Java 15, JEP378中提供。
文本塊由 JEP 355 於 2019 年初提出,作為 JEP 326(原始字符串文字)中開始的探索的后續,JEP 326 最初針對 JDK 12,但最終撤回並沒有出現在該版本中。 JEP 355 於 2019 年 6 月作為預覽功能針對 JDK 13。 JDK 13 的反饋建議在 JDK 14 中再次預覽文本塊,並添加兩個新的轉義序列。 因此,JEP 368 於 2019 年 11 月作為預覽功能針對 JDK 14。 關於 JDK 14 的反饋表明,文本塊已准備好在 JDK 15 中成為最終的和永久的,無需進一步更改。
String query = """
SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB"
WHERE "CITY" = 'INDIANAPOLIS'
ORDER BY "EMP_ID", "LAST_NAME";
""";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.