Java等效于带有#的C#逐字字符串


101

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

例如,我可以@"c:\afolder\afile"使用C#进行处理,并使其在处理时忽略转义字符,而不必这样做"c:\\afolder\\aFile"。是否有Java等效项?

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

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



2
由于@可以同时使用语言关键字作为标识符,因此可以自由声明标题。
乔伊,2010年

@unicornaddict-是的,确实是同样的问题。道歉在搜索时没有看到。@ Johannes-好举动..谢谢
Simon Rigby 2010年

如果您只想在Windows中执行此操作,并且使用Windows XP或更高版本(应该这样做),则可以执行File file = new File(“ C:/ afolder / afile”); 另一方面,如果您想更加便携,则应查看@CPerkins的出色答案。
HaakonLøtveit'16

请注意(2018年1月),Java可能会使用原始字符串文字(JDK 10或更高版本):请参见在Java中,是否有一种无需转义引号就能编写字符串文字的方法?
VonC

Answers:



33

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

但是,如果要使用类似Java(和基于Java-VM的语言)的语言,可能需要查看Groovy,它具有各种形式的字符串常量


第一个链接(普通字符串文字)指向“ Visual Studio 2003退休的技术文档” groovy.codehaus.org链接已断开
Vladas Maier

1
@ace:更新为当前的“字符串”文章,其中包括有关逐字字符串文字的部分。还更新了Groovy链接。
乔恩·斯基特

16

正如肯特(Kent)和乔恩(Jon)所说,没有。

我只是在指出,即使对于您的特殊情况,假设有一个以上的一次性程序,对于一般情况而言,这也是一个坏主意。

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


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

您将基于某些策略(不仅是平台,还希望您的“ afile”相对于实际文件系统根目录还是相对于用户的主目录)单独创建ROOTDIR。

但是可以肯定的是,使用文件分隔符属性可使您的程序更广泛地使用。还有工作吗?是。正如万达·赛克斯(Wanda Sykes)所说,“但是值得”。


1
嗨,谢谢。在我看来,它与“文件名”无关。我所有的代码要做的是获取一个字符串(或尝试输入)并将其传递。除了将其传递到Web服务之外,我实际上不执行任何其他操作。我正在测试从Java调用的ac#WCF服务的响应。由于我只是对测试进行硬编码,因此我发现了这一局限性。我实际上并没有对字符串做任何“基于文件”的操作。
西蒙·里格比

2
逐字字符串非常适合正则表达式模式。
Gordon Bean

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在不久的将来将不会出现逐字字符串。即使出现,它也不会是``。


1
鉴于这是此问题上最受欢迎的讨论之一,因此已撤回JEP 326。该讨论于2019年1月重新开始,现在在JEP 355中已跟踪为JDK13版本。
NPras '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.