Java で Java 文字列リテラルをエスケープ解除する方法
問題
Java ソース コードから文字列リテラルを抽出して渡す必要があるプレーンな文字列を受け入れる関数に追加します。文字列リテラルのエスケープ解除は非常に重要です。これは、特に n や \ などの文字を意図した形式に変換することを意味します。
エスケープ解除に使用できる関数Strings
- org.apache.commons.lang.StringEscapeUtils.unescapeJava()
ただし、この関数にはいくつかの制限があります。
- null 文字表現を無視します( )
- 8 進エスケープを処理しません
- Java 正規表現 (a、e、cX など) で受け入れられるエスケープを処理できません
- Unicode コード ポイントのサポートが不足しており、 UTF-16 文字処理
カスタム ソリューション: unescape_perl_string()
カスタム関数 unescape_perl_string() が代替案として提案されています:
-
すべての Java 文字列エスケープを処理します: r, n, f, t、(とりわけ).
-
をサポートします8 進数のエスケープ: 、N、NN など。
-
追加のエスケープが含まれます: ?cX (制御文字)、?x{XXX} (中括弧で囲んだ 16 進エスケープ)。
-
Java 正規表現エスケープを解析します: [IDIOT JAVA] PREPROCESSOR]uXXXX.
実装の詳細
unescape_perl_string() 関数:
- 入力文字列を反復処理し、次の文字に基づいてエスケープ シーケンスを処理します。 .
- たとえば、r は a に変換されます。キャリッジ リターン、n から改行。
- 制御文字がサポートされており、cX は文字のコードポイントと '@' の論理 XOR の結果を表します。
- 16 進数は xXX および x{XXX をエスケープします
- Unicode コードポイントが認識され、その文字に変換されます。
- 未完了または無効なエスケープにはフラグが立てられ、エラーとして報告されます。
以上がJava 文字列リテラルを適切にエスケープ解除し、すべてのエスケープ シーケンスを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。