web-dev-qa-db-ja.com

Java @を含むC#の逐語的文字列と同等

簡単な質問。 Javaの文字列に適用される@と同等のものはありますか?

たとえば、@"c:\afolder\afile"をC#で処理し、"c:\\afolder\\aFile"。 Java同等のものはありますか?

うーん:stackoverflowは私に逃げています..笑2番目の例は次のようになります。

c :(二重バックスラッシュ)afolder(二重バックスラッシュ)aFile

97
Simon Rigby

いいえ 。文字列のエスケープ/外部化が唯一の選択肢です。

70
Kent Boogaart

いいえ、Javaには 逐語的文字列リテラル はありません。

ただし、doesであるJavaライクな(およびJava-VMベースの)言語が必要な場合は、 Groovy には 文字列リテラルのさまざまな形式 があります。

30
Jon Skeet

ケントとジョンが言ったように、ありません。

私はあなたの特定のケースのために、たとえ一回以上のプログラムを想定して、一般的なケースでは悪い考えがあるとしても、指摘するために答えています。

JavaプログラムはWindows以外のプラットフォームで実行され、他のプラットフォームには異なるファイル区切り文字があります。したがって、エスケープされたバックスラッシュを処理する代わりに、特定の例を処理する正しい方法は、ファイル区切りプロパティを取得することです。


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

プラットフォームだけでなく、「afile」を実際のファイルシステムルートまたはユーザーのホームディレクトリに対して相対的にするかどうかなど、何らかのポリシーに基づいてROOTDIRを個別に作成した場合。

しかし、間違いなく、ファイル区切りプロパティを使用すると、プログラムがより広く使用できるようになります。もっと仕事ですか?はい。ワンダ・サイクスが言うように、「しかしそれは価値がある」。

15
CPerkins

現在、Javaではサポートされていませんが、将来のリリースで使用可能になる可能性があります。 JEP 326:Raw String Literals at 2018/01/23が作成されました)

https://bugs.openjdk.Java.net/browse/JDK-8196004 で進捗状況を確認してください

おそらくいつかあなたはそれをすることができるでしょう:

`c:\afolder\afile`

PDATE: JDKはJDK 12:326からの削除を提案:Raw String Literals(プレビュー)ここに根拠: http://mail.openjdk.Java.net/pipermail/jdk-dev/2018-December/002402.html

そして詳細はこちら https://bugs.openjdk.Java.net/browse/JDK-8215682

ボトムライン:近い将来、Javaに逐語的な文字列はありません。表示されたとしても、むしろ表示されません。

10
engilyin