在Java中,有没有一种方法可以编写字符串文字而不必转义引号?

问题描述 投票:0回答:9

假设你有一个字符串文字,里面有很多引号。你可以逃避所有这些,但这很痛苦,而且很难阅读。

在某些语言中,您可以这样做:

foo = '"Hello, World"';

然而,在 Java 中,

''
用于
char
,因此您不能以这种方式将其用于
String
。有些语言有语法来解决这个问题。例如,在Python中,你可以这样做:

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

Java 有类似的东西吗?

java string escaping
9个回答
168
投票

不,我一直对 Java 中缺乏不同的字符串文字语法感到恼火。

这是我经常使用的一个技巧:

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

我主要只对静态字段做类似的事情。由于它是静态的,因此在类初始化时会调用一次字符串替换代码。因此,运行时性能损失几乎不存在,并且它使代码更加清晰。


80
投票

答案是否定的,证据就在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}"


21
投票

从 Java 15 开始,出现了称为文本块的新功能。它看起来与您提到的 Python 中可用的类似:

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

更多详细信息和示例可以在这里找到:https://openjdk.java.net/jeps/378JEP 378:文本块


¹ 已在 Java 13 和 14 中预览。


14
投票

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 之前,它需要发布、提交、成为候选者并获得资助。


5
投票
简单回答:不。

对于必须转义的较长字符串,我通常从某些外部资源读取它们。


3
投票
您还可以使用 apache commons 中的

StringEscapeUtils

更新

:如果有人对一些示例感兴趣,这里有一个有用的链接:https://dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils


0
投票

int var1=1; System.out.println(STR."var1 = \{var1}");

将输出到下面

var1 = 1



-2
投票

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



-5
投票

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

我认为因为 char 是 String 的原始变量类型,所以 String 和 char 可以组合(至少 eclipse 编译器似乎没有抱怨)。

© www.soinside.com 2019 - 2024. All rights reserved.