假设你有一个字符串文字,里面有很多引号。你可以逃避所有这些,但这很痛苦,而且很难阅读。
在某些语言中,您可以这样做:
foo = '"Hello, World"';
然而,在 Java 中,
''
用于 char
,因此您不能以这种方式将其用于 String
。有些语言有语法来解决这个问题。例如,在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}"
。
从 Java 15 开始,出现了称为文本块的新功能。它看起来与您提到的 Python 中可用的类似:
String text = """
{
"property": "value",
"otherProperty": 12
}
""";
更多详细信息和示例可以在这里找到:https://openjdk.java.net/jeps/378JEP 378:文本块
¹ 已在 Java 13 和 14 中预览。
2018 年 12 月更新(12 个月后):
原始字符串文字(位于琥珀色列表上)不会出现在 JDK 12 中。
请参阅此处的批评。
参见 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`));
整齐!但它仍然
对于必须转义的较长字符串,我通常从某些外部资源读取它们。
int var1=1;
System.out.println(STR."var1 = \{var1}");
将输出到下面
var1 = 1
"These “double quotes” don't need nor want to be escaped"
String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";
我认为因为 char 是 String 的原始变量类型,所以 String 和 char 可以组合(至少 eclipse 编译器似乎没有抱怨)。