Java相当于C#的逐字字符串@

时间:2010-04-20 09:09:55

标签: c# java string literals

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

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

嗯:stackoverflow正在逃避我..哈哈。第二个例子应为:

C:(双反斜杠)afolder(双反斜杠)å文件

5 个答案:

答案 0 :(得分:70)

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

答案 1 :(得分:30)

不,Java没有verbatim string literals

但是,如果您想要 的类似Java(和基于Java-VM)的语言,您可能希望查看具有Groovyvarious 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 上的文档