105

快速提问。是否有与 @ 等效的应用于 Java 中的字符串:

例如,我可以@"c:\afolder\afile"在 C# 中执行并让它在处理时忽略转义字符,而不是必须执行"c:\\afolder\\aFile". 有Java等价物吗?

嗯:stackoverflow 正在逃避我.. 大声笑。第二个示例应为:

c:(双反斜杠)a文件夹(双反斜杠)a文件

4

5 回答 5

78

没有。转义/外部化字符串是您唯一的选择。

于 2010-04-20T09:11:19.583 回答
35

不,Java 没有逐字字符串文字

但是,如果您想要一种类似 Java(和基于 Java-VM)的语言,您可能需要查看具有各种形式的字符串文字的Groovy

于 2010-04-20T09:11:28.303 回答
16

正如肯特和乔恩所说,不,没有。

我回答只是为了指出,即使有,对于您的特定情况,在一般情况下,假设一个不止一次性的程序,这将是一个坏主意。

Java 程序可以在更多平台上运行,而不仅仅是 Windows,其他平台具有不同的文件分隔符。因此,处理您的特定示例的正确方法是获取文件分隔符属性,而不是处理转义的反斜杠:


    String sep = System.getProperty("file.separator");
    String filename = ROOTDIR + sep + "folder" + sep + "afile";

您将根据某些策略单独创建 ROOTDIR - 不仅是平台,而且您是否希望您的“afile”相对于实际的文件系统根目录,或者相对于用户的主目录。

但可以肯定的是,使用文件分隔符属性可以让您的程序更广泛地使用。工作量更大吗?是的。正如 Wanda Sykes 所说,“但这是值得的”。

于 2010-04-20T11:32:49.513 回答
12

目前它在 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 中不会出现逐字字符串。即使它会出现它也不会是``。

于 2018-03-29T10:50:34.960 回答
4

Java 自 2019 年 9 月以来就有它,但它使用了不同的 sintax。“””(三个双引号)。

*在较新的 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上的文档

于 2021-03-07T11:28:17.563 回答