在Java中,有没有写一个字符串,而不必逃避报价的方法吗?在Java中,有没有写一个字符串,而不必逃

2019-05-10 12:34发布

假设你有字面上有很多里面的引号的字符串。 你能逃脱他们所有,但它是一个痛苦和难以阅读。

在一些语言中,你可以这样做:

foo = '"Hello, World"';

但是在Java中, ''用于char S,所以你不能使用它的String s此方式。 有些语言有语法来解决这个问题。 例如,在Python中,你可以这样做:

"""A pretty "convenient" string"""

Java的是否有类似的东西吗?

Answer 1:

答案是否定的,并证明存在于Java语言规范

  StringLiteral:
   "StringCharacters"

  StringCharacters:
   StringCharacter
   | StringCharacters StringCharacter

  StringCharacter:
   InputCharacter but not " or \
   | EscapeSequence

正如你可以看到一个StringLiteral可以直接通过绑定"并不能包含特殊字符不逃逸..

旁注:你可以嵌入Groovy的项目里面,这会扩展Java的语法允许你使用'''multi line string '''' "string with single quotes" '"string with ${variable}"



Answer 2:

不,我一直因缺乏在Java中不同的字符串字面语法恼火。

下面是我从一次使用时间一招:

String myString = "using `backticks` instead of quotes".replace('`', '"');

我主要只是做这样的事情,对于一个静态字段。 由于它是静态的字符串替换代码被调用一次,在类的初始化。 所以运行时性能损失几乎不存在,这使得代码相当的可读性。



Answer 3:

更新2018年12月(12个月后):

原始字符串字面量(这是对琥珀列表 )不会使它到JDK 12。
见批评这里 。


有可能是在Java中(10以上)的未来版本。

见JEPS 8196004从2018 1月:( “JEP”是“JDK增强计划” )

JEP草案:原始字符串字面量

添加了一种新的文字,原始字符串字面量,Java编程语言。
像传统的字符串文字,原始字符串字面量产生一个字符串,但不解释字符串脱离,而且可以跨越的源代码多行

因此,而不是:

Runtime.getRuntime().exec("\"C:\\Program Files\\foo\" bar");
String html = "<html>\n"
              "    <body>\n" +
              "         <p>Hello World.</p>\n" +
              "    </body>\n" +
              "</html>\n";
System.out.println("this".matches("\\w\\w\\w\\w"));

您将能够键入:

Runtime.getRuntime().exec(`"C:\Program Files\foo" bar"`);

String html = `<html>
                   <body>
                       <p>Hello World.</p>
                   </body>
               </html>
              `;

System.out.println("this".matches(`\w\w\w\w`));

整齐!

但它仍然是只是一个草案 :将需要发布,提交,成为竞选的候选人,并即将完成,并使它成为下一个JDK之前资助。



Answer 4:

你也可以使用StringEscapeUtils从Apache的百科全书

更新 :如果有人有兴趣在一些例子这里是一个有用的链接: http://java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils



Answer 5:

答案很简单:没有。

对于必须进行转义长字符串,我通常从一些外部资源阅读。



Answer 6:

以下似乎为我工作:

String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";

我想,因为焦炭是字符串,字符串和字符的原始变量类型可以组合(至少Eclipse编译器似乎没有抱怨)。



Answer 7:

如果你想逃避'或者"你的字符串,可以使用下面的代码:

String text = ...

text = text.replaceAll("('|\")", "\\\\$1");


文章来源: In Java, is there a way to write a string literal without having to escape quotes?