105

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

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

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

c:(double-backslash)afolder(double-backslash)aFile

4

5 に答える 5

78

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

于 2010-04-20T09:11:19.583 に答える
35

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

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

于 2010-04-20T09:11:28.303 に答える
16

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

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

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


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

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

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

于 2010-04-20T11:32:49.513 に答える
12

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

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

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

`c:\afolder\afile`

更新: JEPは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には逐語的な文字列はありません。そして、それが表示されたとしても、それはむしろ「ではありません。

于 2018-03-29T10:50:34.960 に答える
4

Javaは2019年9月からそれを持っていますが、それは異なるsintaxを使用していました。「」」(3つの二重引用符)。

*最近のJavaバージョン(プレビューでは+13、本番環境では+15)では、Javaテキストブロックを使用してほぼ同等の機能を実現できます。

String html = """         
            <xml>
                <ody>
                    <pan>example xml </pan>
                </ody>
            </xml>""";

https://docs.oracle.com/en/java/javase/13/text_blocks/index.htmlのドキュメント

于 2021-03-07T11:28:17.563 に答える