文字列リテラルに多くの引用符が含まれているとします。あなたはそれらをすべて逃げることができますが、それは苦痛であり、読みにくいです。
一部の言語では、これを行うことができます。
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か月後):
生の文字列リテラル( a色のリスト にあります)は、JDK 12に到達しません。
「 批評はこちら 」を参照してください。
Java(10以上)の将来のバージョンに存在する可能性があります。
2018年1月から JEPS 8196004 を参照してください:( 「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に入れる前に、投稿、提出、候補者、資金提供する必要があります。
apache commonsの StringEscapeUtils も使用できます。
[〜#〜] update [〜#〜]:もし誰かがいくつかの例に興味があるなら、ここに役立つリンクがあります: http:/ /Java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
簡単な答え:いいえ。
エスケープする必要がある長い文字列については、通常、外部リソースから読み取ります。