@を含むC#の逐語的文字列に相当するJava


101

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

たとえば@"c:\afolder\afile"、C#で行うことができ、処理するときにエスケープ文字を無視する代わりに、エスケープ文字を無視することができます"c:\\afolder\\aFile"。Javaに相当するものはありますか?

うーん、stackoverflowが私をエスケープしています。2番目の例は次のようになります。

c :(ダブルバックスラッシュ)aフォルダー(ダブルバックスラッシュ)aファイル



2
@識別子として言語キーワードを使用することもできるので、タイトルを明確にする自由を手に入れました。
ジョーイ

@unicornaddict-確かに同じ質問です。申し訳ありませんが、検索したときにそれがわかりませんでした。@ヨハネス-良い動き..ありがとう
サイモン・リグビー

Windowsでそれを実行したい場合で、Windows XP以降を使用している場合(そうする必要があります!)、File file = new File( "C:/ afolder / afile"); 一方、よりポータブルになりたい場合は、@ CPerkinsの優れた答えを見てください。
HaakonLøtveit16年

注(2018年1月)、未加工の文字列リテラルがJava(JDK 10以降)で提供される可能性があります。「Javaでは、引用符をエスケープせずに文字列リテラルを書き込む方法はありますか?」
VonC、2018年

回答:



33

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

ただし、Javaに似た(およびJava-VMベースの)言語が必要な場合は、さまざまな形式の文字列リテラルを備えたGroovyを検討することをお勧めします。


最初のリンク(逐語的文字列リテラル)が「Visual Studio 2003 Retired Technical documentation」 groovy.codehaus.orgへのリンクを指す
Vladas Maier

1
@ace:逐語的な文字列リテラルに関するセクションを含む現在の「文字列」の記事に更新されました。Groovyリンクも更新。
Jon Skeet、

16

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

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

Javaプログラムは、Windowsだけでなく他のプラットフォームでも実行され、他のプラットフォームではファイル区切りが異なります。したがって、エスケープされた円記号を処理する代わりに、特定の例を処理する正しい方法は、ファイル区切りプロパティを取得することです。


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

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

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


1
ヒヤ、ありがとう。それは私の場合、一種の無関係な「ファイル名」であるという事実。私のコードが実行していることは、文字列を取得(または試行)して渡すことです。Webサービスに渡す以外、実際には何もしません。Javaから呼び出されているC#WCFサービスからの応答をテストしていました。私はテストをハードコーディングしているだけなので、この時点でこの制限を発見しました。私は実際には文字列を使用して「ファイルベース」の処理を行っていません。
Simon Rigby

2
逐語的文字列は、正規表現パターンに最適です。
ゴードンビーン

12

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

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

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

`c:\afolder\afile`

UPDATE: 生の文字列リテラル(プレビュー):326:JEPはJDK 12から落下することを提案し ますが、理論的根拠をここに読むことができます: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

詳細はこちらhttps://bugs.openjdk.java.net/browse/JDK-8215682

一番下の行:近い将来、Javaでそのまま文字列があってはなりません。そして、それが現れたとしても、むしろそうではありません」


1
これはこの問題で最も人気のある議論の1つであるため、JEP 326は取り下げられました。ディスカッションは2019年1月再開され、現在はJEP 355でJDK13リリースについて追跡されています。
NPras
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.