簡體   English   中英

在 Java 中,有沒有一種無需轉義引號即可編寫字符串文字的方法?

[英]In Java, is there a way to write a string literal without having to escape quotes?

假設您有一個 String 文字,里面有很多引號。 你可以逃避所有這些,但這很痛苦,而且難以閱讀。

在某些語言中,您可以這樣做:

foo = '"Hello, World"';

但是,在 Java 中, ''用於char s,因此您不能以這種方式將它用於String s。 一些語言有語法來解決這個問題。 比如在python中,你可以這樣做:

"""A pretty "convenient" string"""

Java有沒有類似的東西?

不,我一直對 Java 中缺少不同的字符串文字語法感到惱火。

這是我不時使用的一個技巧:

String myString = "using `backticks` instead of quotes".replace('`', '"');

我主要只對靜態字段做類似的事情。 由於它是靜態的,字符串替換代碼在類初始化時被調用一次。 因此運行時性能損失實際上是不存在的,它使代碼更加清晰易讀。

答案是否定的,證據在Java 語言規范中

  StringLiteral:
   "StringCharacters"

  StringCharacters:
   StringCharacter
   | StringCharacters StringCharacter

  StringCharacter:
   InputCharacter but not " or \
   | EscapeSequence

正如你可以看到一個StringLiteral可以直接通過綁定"並不能包含特殊字符不逃逸..

旁注:您可以將Groovy嵌入到您的項目中,這將擴展 Java 的語法,允許您使用'''multi line string '''' "string with single quotes" '以及"string with ${variable}"

2018 年 12 月更新(12 個月后):

原始字符串文字(位於琥珀色列表中)不會出現在 JDK 12 中。
看到這里批評


可能會有 Java 的未來版本(10 個或更多)。

請參閱 2018 年 1 月的JEPS 8196004 :( “JEP”是“JDK 增強程序”

JEP 草案:原始字符串文字

向 Java 編程語言添加一種新的文字,原始字符串文字。
與傳統的字符串文字一樣,原始字符串文字會產生一個字符串,但不會解釋字符串轉義,並且可以跨越多行源代碼

所以而不是:

Runtime.getRuntime().exec("\"C:\\Program Files\\foo\" bar");
String html = "<html>\n"
              "    <body>\n" +
              "         <p>Hello World.</p>\n" +
              "    </body>\n" +
              "</html>\n";
System.out.println("this".matches("\\w\\w\\w\\w"));

你可以輸入:

Runtime.getRuntime().exec(`"C:\Program Files\foo" bar"`);
    
String html = `<html>
                   <body>
                       <p>Hello World.</p>
                   </body>
               </html>
              `;

System.out.println("this".matches(`\w\w\w\w`));

整潔的!

但它仍然只是一個草案:在完成並進入下一個 JDK 之前,它需要發布、提交、成為候選人和資助。

簡單的回答:不。

對於必須轉義的較長字符串,我通常從一些外部資源中讀取它們。

從 Java 15¹ 開始,有一個名為 Text Blocks 的新功能。 它看起來類似於您提到的 Python 中可用的內容:

String text = """
              {
                 "property": "value",
                 "otherProperty": 12
              }
              """;

可以在此處找到帶有示例的更多詳細信息: https : //openjdk.java.net/jeps/378


¹在 Java 13 和 14 中預覽。

您還可以使用 apache commons 中的StringEscapeUtils

更新:如果有人對一些例子感興趣,這里有一個有用的鏈接: https : //dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils

如果您不介意差異,您可以使用左引號和/或右引號,它們看起來非常相似:

"These “double quotes” don't need nor want to be escaped"

以下似乎對我有用:

String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";

我認為因為 char 是 String 的原始變量類型,所以 Strings 和 chars 可以組合(至少 eclipse 編譯器似乎沒有抱怨)。

如果要在字符串中轉義'" ,可以使用以下代碼:

String text = ...

text = text.replaceAll("('|\")", "\\\\$1");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM