在 Scala 中,您可以执行以下操作:
val expr = """ This is a "string" with "quotes" in it! """
Java中有这样的东西吗?我讨厌用"\""
引号来表示字符串。尤其是在 JSON 中组合键/值对时。恶心!
在 Scala 中,您可以执行以下操作:
val expr = """ This is a "string" with "quotes" in it! """
Java中有这样的东西吗?我讨厌用"\""
引号来表示字符串。尤其是在 JSON 中组合键/值对时。恶心!
\"
除了使用在字符串文字中包含双引号之外,没有其他好的选择。
有不好的选择:
\u0022
, 双引号字符的 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);它们有不同的外观,但它们会起作用。我想隐藏“恶心”-ness,你可以把它隐藏在一个常数后面。
public static final String DOUBLE_QUOTE = "\"";
然后你可以使用:
String expr = " This is a " + DOUBLE_QUOTE + "string" + DOUBLE_QUOTE + ...;
它比其他选项更具可读性,但仍然不是很可读,而且仍然很丑。
Java中没有"""
机制,因此使用 escape\"
是最好的选择。它是最易读的,也是最不难看的。
自 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 放入单独文件的中间步骤,这可能还不错。
的功能"Raw String Literals"
原本是在Java 12中,但由于一些批评而被撤回,因为他们计划使用可变数量的反引号(`)。
所以它最终在Java 13中作为"Text Block"
功能,但仅在预览中。它使用"""
Scala 中的运算符。
您可以在此处阅读有关 Java 13 功能的更多信息。