[英]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.