快速提问。是否有相应的@应用于Java中的字符串:
例如,我可以在C#中执行@"c:\afolder\afile"
并让它在处理时忽略转义字符而不必执行"c:\\afolder\\aFile"
。是否有Java等价物?
嗯:stackoverflow正在逃避我..哈哈。第二个例子应为:
C:(双反斜杠)afolder(双反斜杠)å文件
答案 0 :(得分:70)
No。转义/外化字符串是您唯一的选择。
答案 1 :(得分:30)
不,Java没有verbatim string literals。
但是,如果您想要 的类似Java(和基于Java-VM)的语言,您可能希望查看具有Groovy的various forms of string literal。
答案 2 :(得分:15)
正如肯特和乔恩所说,不,没有。
我正在回答只是指出,即使存在,对于您的特定情况,在一般情况下,假设一个以上的程序,这将是一个坏主意。
Java程序在比Windows更多的平台上运行,而其他平台具有不同的文件分隔符。因此,处理您的特定示例的正确方法是获取文件分隔符属性,而不是处理转义的反斜杠:
String sep = System.getProperty("file.separator");
String filename = ROOTDIR + sep + "folder" + sep + "afile";
您根据某些策略单独创建ROOTDIR - 不仅是平台,还有您希望“afile”是相对于实际文件系统根目录还是相对于用户主目录。
但是,使用文件分隔符属性肯定会使您的程序更广泛地使用。它更有效吗?是。正如万达赛克斯所说,“但这是值得的。”
答案 3 :(得分:9)
目前,Java不支持它,但可以在将来的版本中使用。 在2018/01/23
创建了 JEP 326:Raw String Literals查看https://bugs.openjdk.java.net/browse/JDK-8196004
的进度可能有一天你可以用:
`c:\afolder\afile`
更新: JEP建议从JDK 12:326中删除:原始字符串文字(预览) 您可以在此处阅读基本原理:http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html
此处有更多详情https://bugs.openjdk.java.net/browse/JDK-8215682
底线:Java在不久的将来不会有逐字字符串。即使它出现了它也不会是``。
答案 4 :(得分:2)
Java 于 2019 年 9 月开始使用它,但它使用了不同的语法。 “””(三个双引号)。
*在更新的 Java 版本中(预览版 +13,生产就绪版 +15),使用 Java 文本块可以实现大部分等效。
String html = """
<xml>
<ody>
<pan>example xml </pan>
</ody>
</xml>""";
https://docs.oracle.com/en/java/javase/13/text_blocks/index.html 上的文档