假设你有一个字符串文字,里面有很多引号。你可以逃脱它们,但这很痛苦,而且难以阅读。
在某些语言中,您可以这样做:
foo = '"Hello, World"';
但是,在Java中,''
用于char
,因此您不能以String
方式使用它。有些语言有解决此问题的语法。例如,在python中,您可以这样做:
"""A pretty "convenient" string"""
Java有类似的东西吗?
答案 0 :(得分:130)
不,我一直对Java中缺少不同的字符串文字语法感到恼火。
这是我不时使用的一个技巧:
String myString = "using `backticks` instead of quotes".replace('`', '"');
我主要只为静态字段做类似的事情。由于它是静态的,因此在初始化类时,字符串替换代码会被调用一次。因此,运行时性能损失实际上是不存在的,并且它使代码更加清晰。
答案 1 :(得分:68)
答案是否定的,证据在于 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}"
。< / p>
答案 2 :(得分:7)
2018年12月更新(12个月后):
原始字符串文字(位于amber list上)不会进入JDK 12 请参阅criticisms here。
Java的未来版本可能有10个或更多。
请参阅2018年1月的JEPS 8196004 :( "JEP" is the "JDK Enhancement Program")
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`));
纯!
但它仍然是just a draft:在完成并进入下一个JDK之前,它需要发布,提交,成为候选人并获得资助。
答案 3 :(得分:5)
您也可以使用apache commons中的StringEscapeUtils
更新:如果有人对某些示例感兴趣,这里有一个有用的链接:http://java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
答案 4 :(得分:4)
简单回答:不。
对于必须转义的较长字符串,我通常会从某些外部资源中读取它们。
答案 5 :(得分:2)
从Java 13开始,有一个称为“文本块”的新功能。它看起来类似于您提到的python中可用的内容:
String text = """
{
"property": "value",
"otherProperty": 12
}
""";
有关示例的更多详细信息,请参见:https://openjdk.java.net/jeps/355
答案 6 :(得分:-3)
以下似乎对我有用:
String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";
我认为因为char是String的原始变量类型,所以可以组合字符串和字符(至少eclipse编译器似乎没有抱怨)。
答案 7 :(得分:-4)
如果您想在字符串中转义'
或"
,可以使用以下代码:
String text = ...
text = text.replaceAll("('|\")", "\\\\$1");