快速问题。在Java中是否有适用于字符串的@等效项:
例如,在C#中我可以做@"c:\afolder\afile"
,并且在处理时忽略转义字符,而不是必须执行"c:\\afolder\\aFile"
。是否有Java等效项?
嗯:stackoverflow把我弄糊涂了..哈哈。第二个例子应该这样写:
c:(双反斜杠)afolder(双反斜杠)aFile
快速问题。在Java中是否有适用于字符串的@等效项:
例如,在C#中我可以做@"c:\afolder\afile"
,并且在处理时忽略转义字符,而不是必须执行"c:\\afolder\\aFile"
。是否有Java等效项?
嗯:stackoverflow把我弄糊涂了..哈哈。第二个例子应该这样写:
c:(双反斜杠)afolder(双反斜杠)aFile
不是。转义/外部化字符串是您唯一的选择。
不,Java没有逐字字符串字面量。
如果你想要一种类似于Java(基于Java虚拟机)的语言,并且该语言有这样的功能,那么你可以考虑Groovy,它有各种形式的字符串字面量。
正如Kent和Jon所说,答案是否定的。
我回答只是为了指出即使有,对于您的特定情况,在通常情况下都是一个不好的想法,假设不仅是一次性程序。
Java程序在除Windows之外的更多平台上运行,其他平台具有不同的文件分隔符。因此,处理转义反斜杠的正确方法是通过获取文件分隔符属性来处理您的特定示例:
String sep = System.getProperty("file.separator");
String filename = ROOTDIR + sep + "folder" + sep + "afile";
在这种情况下,您需要根据某些策略分别创建ROOTDIR - 不仅仅是平台,还包括您希望您的“afile”相对于实际文件系统根目录还是相对于用户主目录。
但是无论如何,使用文件分隔符属性可以使您的程序更广泛地可用。 这需要更多的工作吗? 是的。 正如Wanda Sykes所说,“但它是值得的”。
目前Java还不支持,但可能在未来的版本中会提供。2018/01/23创建了JEP 326:原始字符串字面量。
请查看进展情况: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不会在近期支持原样字符串。即使出现,也不太可能使用``符号。
自2019年9月起,Java就拥有了它,但使用的是不同的语法。 """(三个双引号标记)。
*在更近期的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 的文档。