在Java中,有没有办法写一个string文字而不必转义引号?
假设你有一个带有大量引号的string文字。 你可以逃避一切,但这是一个痛苦,难以阅读。
在某些语言中,你可以这样做:
foo = '"Hello, World"';
然而,在Java中, ''
用于char
,所以你不能以这种方式将它用于String
。 有些语言有解决这个问题的语法。 例如,在Python中,你可以这样做:
"""A pretty "convenient" string"""
Java有类似的东西吗?
答案是否定的,certificate存在于Java语言规范中 :
StringLiteral: "StringCharacters" StringCharacters: StringCharacter | StringCharacters StringCharacter StringCharacter: InputCharacter but not " or \ | EscapeSequence
正如你所看到的,一个StringLiteral
可以被绑定"
,并且不能包含没有转义的特殊字符。
一个侧面说明:你可以在你的项目中embeddedGroovy ,这将扩展Java的语法,允许你使用'''multi line string '''
, ' "string with single quotes" '
以及' "string with single quotes" '
"string with ${variable}"
' "string with single quotes" '
"string with ${variable}"
。
不,我一直对Java缺乏不同的string文字感到恼火。
以下是我不时使用的一个技巧:
String myString = "using `backticks` instead of quotes".replace('`', '"');
我主要只是做一些这样的静态字段。 由于它是静态的,因此在类的初始化时,stringreplace代码被调用一次。 所以运行时性能损失实际上是不存在的,并且使得代码更清晰易读。
你也可以使用Apache公共的StringEscapeUtils
更新 :如果有人有兴趣在这里的一些例子是一个有用的链接: http : //java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
简单的回答:不。
对于必须转义的更长的string,我通常从外部资源读取它们。
以下似乎为我工作:
String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";
我认为,因为char是String的原始variablestypes,string和字符可以组合(至lesseclipse编译器似乎没有抱怨)。
如果你想在string中'
或"
转义,你可以使用下面的代码:
String text = ... text = text.replaceAll("('|\")", "\\\\$1");