假设你有字面上有很多里面的引号的字符串。 你能逃脱他们所有,但它是一个痛苦和难以阅读。
在一些语言中,你可以这样做:
foo = '"Hello, World"';
但是在Java中, ''
用于char
S,所以你不能使用它的String
s此方式。 有些语言有语法来解决这个问题。 例如,在Python中,你可以这样做:
"""A pretty "convenient" string"""
Java的是否有类似的东西吗?
假设你有字面上有很多里面的引号的字符串。 你能逃脱他们所有,但它是一个痛苦和难以阅读。
在一些语言中,你可以这样做:
foo = '"Hello, World"';
但是在Java中, ''
用于char
S,所以你不能使用它的String
s此方式。 有些语言有语法来解决这个问题。 例如,在Python中,你可以这样做:
"""A pretty "convenient" string"""
Java的是否有类似的东西吗?
答案是否定的,并证明存在于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}"
。
不,我一直因缺乏在Java中不同的字符串字面语法恼火。
下面是我从一次使用时间一招:
String myString = "using `backticks` instead of quotes".replace('`', '"');
我主要只是做这样的事情,对于一个静态字段。 由于它是静态的字符串替换代码被调用一次,在类的初始化。 所以运行时性能损失几乎不存在,这使得代码相当的可读性。
更新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之前资助。
你也可以使用StringEscapeUtils从Apache的百科全书
更新 :如果有人有兴趣在一些例子这里是一个有用的链接: http://java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
答案很简单:没有。
对于必须进行转义长字符串,我通常从一些外部资源阅读。
以下似乎为我工作:
String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";
我想,因为焦炭是字符串,字符串和字符的原始变量类型可以组合(至少Eclipse编译器似乎没有抱怨)。
如果你想逃避'
或者"
你的字符串,可以使用下面的代码:
String text = ...
text = text.replaceAll("('|\")", "\\\\$1");