83

Javaで生の文字列を使用する方法はありますか(エスケープシーケンスなし)?

(私はかなりの量の正規表現コードを書いていますが、生の文字列は私のコードを非常に読みやすくします)

言語がこれを直接提供していないことは理解していますが、何らかの方法でそれらを「シミュレート」する方法はありますか?

4

13 に答える 13

48

これは、Eclipse を使用している場合の回避策です。テキストを文字列リテラルに貼り付けると、テキストの長いブロックが自動的に正しくマルチライン化され、特殊文字が自動的にエスケープされます

"-ここに貼り付け-";

ウィンドウでそのオプションを有効にした場合→設定→Java→エディター→入力→「文字列リテラルに貼り付けるときにテキストをエスケープする」

于 2010-10-20T12:39:39.390 に答える
40

いいえ、ありません。

通常、未加工の文字列と正規表現をプロパティ ファイルに入れますが、これらにはエスケープ シーケンスの要件もあります。

于 2009-08-10T19:20:36.570 に答える
30

私はPattern.quoteを使用します。そして、それは質問の問題を解決します。したがって:

Pattern pattern = Pattern.compile(Pattern.quote("\r\n?|\n"));

quote メソッドは、指定された文字列引数に一致する文字列を返します。返される文字列は、このケースでは適切に引用された文字列です。

于 2013-04-20T09:46:12.557 に答える
13

いいえ(非常に悲しい)。

于 2009-08-10T19:19:54.887 に答える
5

生のテキスト ファイルをクラス パスに配置し、getResourceAsStream(...) で読み込みます。

于 2009-08-10T23:18:37.243 に答える
4

プロパティファイルは一般的ですが、面倒です-私はほとんどの正規表現をコードとして扱い、参照できる場所に保持します。実際の質問については、次のようにしてください。)

はい、読みやすさの悪さを回避する方法があります。あなたは試すかもしれません:

String s = "crazy escaped garbage"; //readable version//

ただし、これは更新時に注意が必要です。Eclipseには、引用符の間にテキストを貼り付けることができるオプションがあり、エスケープシーケンスが適用されます。戦術は、最初に読み取り可能なバージョンを編集し、次にガベージを削除して、空の引用符""の間に貼り付けることです。


アイデアの時間:

エディターをハックして変換します。プラグインとしてリリースします。プラグインをチェックしましたが、見つかりませんでした(検索してみてください)。エスケープされたソース文字列とテキストボックステキストの間には1対1の対応があります(\ n、\ r \ nの割引)。おそらく、両端に2つの引用符が付いた強調表示されたテキストを使用できます。

String s = "##########
#####";

ここで、#は強調表示されている任意の文字であり、改行は改行として扱われます。ハイライトされた領域内に入力または貼り付けられたテキストは、「実際の」ソースでエスケープされ、そうでないかのように表示されます。(Eclipseが貼り付けられたテキストをエスケープするのと同じように、これは入力されたテキストをエスケープし、バックスラッシュなしで表示します。)通常どおり編集する場合は、引用符の1つを削除して構文エラーを発生させます。うーん。

于 2009-08-11T01:19:43.190 に答える
2

String#getBytes()は、16 ビットの UTF-16 でエンコードされた文字列を実際に含むすべての単一の String オブジェクトに含まれる内部バイト配列のコピーを公開します。バイト配列には、プラットフォームのデフォルトの文字セットに一致するように変換された同じ文字列が含まれます。私が言いたいのは、これは Java で得られる最も「生の」文字列に近いと思うということです。

于 2009-08-10T19:27:07.803 に答える
1

私は個人的に正規表現文字列データをコードではなくデータと考えているため、コードではそれらが好きではありませんが、それは非現実的で人気がないことを認識しています (はい、私に怒鳴る必要はありません)。

これを行うネイティブな方法がないことを考えると、2 つの可能性を思いつくことができます (まあ、3 つですが、3 つ目はうーん、不自然です)。

したがって、私の個人的な好みは、ファイルを文字列に解析することです。コードから簡単にアクセスできるように、ファイル内の各エントリに名前を付けて、それらすべてをハッシュ テーブルに読み込むことができます。

2 番目の選択肢は、Java インターフェースに前処理されるファイルを作成することです。そのため、正規表現をエスケープできます。個人的にはコード生成は嫌いですが、Java ファイルが 100% 人が編集したことがないのであれば、それほど悪くはありません (本当の悪は、あなたが編集することが期待されている生成されたファイルです!)

3 番目 (トリッキーで、おそらく悪い考えです): コンパイル時にコメントからテキスト ファイルまたはヘッダー ファイルに文字列を抽出するカスタム ドックレットを作成し、上記の他の 2 つの方法のいずれかを使用できる場合があります。これにより、文字列が使用されているのと同じファイルに保持されます。これを正しく行うのは非常に難しく、失敗した場合のペナルティは非常に大きいため、圧倒的なニーズとかなりの才能がない限り、それを検討することさえありません.

コメントは自由形式であり、「pre」タグ内のものはフォーマッターやその他のシステムの醜さからかなり安全であるため、これをお勧めします。ドックレットは、javadoc を出力する前にこれを抽出し、正規表現文字列の使用を示す生成された javadoc の一部を追加することさえできます。

反対票を投じて、これはばかげたアイデアだと言う前に、私は知っていますが、興味深いので提案したいと思っていましたが、上記で述べたように、私の好みは単純なテキストファイルです...

于 2009-08-10T22:39:40.363 に答える
1

独自のエスケープされていないプロパティ リーダーを作成し、文字列をリソース ファイルに入れることができます。

于 2009-08-10T22:20:39.793 に答える