ホームページ >Java >&#&チュートリアル >Java 文字列リテラルを適切にエスケープ解除し、すべてのエスケープ シーケンスを処理する方法

Java 文字列リテラルを適切にエスケープ解除し、すべてのエスケープ シーケンスを処理する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-21 12:29:10747ブラウズ

How to Properly Unescape Java String Literals, Handling All Escape Sequences?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。