Mat*_*hew 106 java string escaping
假设你有一个字符串文字,里面有很多引号.你可以逃避所有这些,但这是一种痛苦,难以阅读.
在某些语言中,您可以这样做:
foo = '"Hello, World"';
Run Code Online (Sandbox Code Playgroud)
但是,在Java中,s ''用于chars,因此不能以String这种方式使用它.有些语言有解决此问题的语法.例如,在python中,您可以这样做:
"""A pretty "convenient" string"""
Run Code Online (Sandbox Code Playgroud)
Java有类似的东西吗?
ben*_*ith 137
No, and I've always been annoyed by the lack of different string-literal syntaxes in Java.
Here's a trick I've used from time to time:
String myString = "using `backticks` instead of quotes".replace('`', '"');
Run Code Online (Sandbox Code Playgroud)
我主要只为静态字段做类似的事情.由于它是静态的,因此在初始化类时,字符串替换代码会被调用一次.因此,运行时性能损失实际上是不存在的,并且它使代码更加清晰.
Jac*_*ack 72
答案是否定的,证据在于Java语言规范:
StringLiteral:
"StringCharacters"
StringCharacters:
StringCharacter
| StringCharacters StringCharacter
StringCharacter:
InputCharacter but not " or \
| EscapeSequence
Run Code Online (Sandbox Code Playgroud)
你可以看到一个StringLiteral可以被绑定"但不能包含没有转义的特殊字符.
附注:您可以在项目中嵌入Groovy,这将扩展Java的语法,允许您使用'''multi line string ''',' "string with single quotes" '以及"string with ${variable}".
Mat*_*hel 21
从 Java 15\xc2\xb9 开始,出现了称为文本块的新功能。它看起来类似于你提到的 Python 中可用的内容:
\nString text = """\n {\n "property": "value",\n "otherProperty": 12\n }\n """;\nRun Code Online (Sandbox Code Playgroud)\n更多详细信息和示例可以在这里找到: https: //openjdk.java.net/jeps/378 JEP 378:文本块
\n\xc2\xb9在 Java 13 和 14 中预览。
\n2018年12月更新(12个月后):
原始字符串文字(在琥珀色列表中)将不会进入JDK 12.
请参阅此处的批评.
Java的未来版本可能存在(10个或更多).
从2018年1月开始参见JEPS 8196004 :( "JEP"是"JDK增强计划")
JEP草案:原始字符串文字
将一种新的文字(原始字符串文字)添加到Java编程语言中.
与传统的字符串文字一样,原始字符串文字生成一个String,但不解释字符串转义,并且可以跨越多行源代码.
所以代替:
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"));
Run Code Online (Sandbox Code Playgroud)
你可以输入:
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`));
Run Code Online (Sandbox Code Playgroud)
整齐!
但它仍然只是一个草案:在完成并进入下一个JDK之前,它需要发布,提交,成为候选人并获得资助.
你也可以使用apache commons中的StringEscapeUtils
更新:如果有人对某些示例感兴趣,这里有一个有用的链接:http://java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
| 归档时间: |
|
| 查看次数: |
82349 次 |
| 最近记录: |