在Scala中,您可以执行以下操作:
val expr = """ This is a "string" with "quotes" in it! """
Java中有这样的东西吗?我厌恶使用"\""
来表示带引号的字符串。特别是在JSON中组合键/值对时。恶心!
答案 0 :(得分:7)
使用\"
在字符串文字中包含双引号没有其他好的替代方法。
有不好的选择:
\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);他们有不同的外表,但他们会工作。我想隐藏“恶心”,你可以将它隐藏在常数之后。
public static final String DOUBLE_QUOTE = "\"";
然后你可以使用:
String expr = " This is a " + DOUBLE_QUOTE + "string" + DOUBLE_QUOTE + ...;
它比其他选项更具可读性,但它仍然不是很易读,而且它仍然很难看。
Java中没有"""
机制,因此使用escape \"
是最佳选择。它是最具可读性的,也是最难看的。
答案 1 :(得分:4)
自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;
""";
这将导致四行文字:
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.""";
注意::此功能是预览功能,因此除非您设置了--enable-preview TextBlock
键,否则您无法在Java 13中使用它。
更新:该功能已在Java 14上用于the second preview (JEP 368)。
将等待Java 15。
答案 2 :(得分:1)
在做同样的事情时发现了这个问题:编写小的文字JSON字符串以便快速测试。一个没有出现的替代方案是使用双引号并用双引号替换它们,例如:
String json = "{ ''label'' : ''set range'', ''min'' : 0, ''max'' : 100}".replace("''", "\"")
显然,如果有一个常规的双单引号,这不起作用,但这种可能性很小。这不是一个很好的解决方案,但看起来比很多反斜杠,imo更好。作为将json放在单独文件中的中间步骤,这可能不是太糟糕。
答案 3 :(得分:0)