ホームページ >Java >&#&チュートリアル >Java 文字列リテラルを効果的にエスケープ解除する方法
問題:
Java には Java 文字列リテラルがありますエスケープされていない文字列を期待する関数に渡す前にエスケープを解除する必要があるもの (例: n を次のように変換する) newline と単一の ).
解決策:
Java にはこのための組み込み関数がありませんが、利用可能なオプションがあります:
1. [Commons Lang StringEscapeUtils](https://commons.apache.org/proper/commons-lang/javadocs/api-3.12/org/apache/commons/lang3/StringEscapeUtils.html)**:
このライブラリは、unescapeJava() メソッドを提供します。ただし、制限があります (例: for null を忘れるなど)。
2.カスタム Unescape 関数:
Commons Lang メソッドの制限に対処して、問題を解決するカスタム関数を作成できます。カスタム ソリューションの例を次に示します。
public static String unescapeJavaString(String oldstr) { // Initialize variables StringBuilder newstr = new StringBuilder(oldstr.length()); boolean saw_backslash = false; for (int i = 0; i < oldstr.length(); i++) { int cp = oldstr.codePointAt(i); // Handle UTF-16 code units if (oldstr.codePointAt(i) > Character.MAX_VALUE) { i++; } // Process characters if (!saw_backslash) { if (cp == '\') { saw_backslash = true; } else { newstr.append(Character.toChars(cp)); } continue; } // Handle backslash sequences if (cp == '\') { saw_backslash = false; newstr.append('\'); newstr.append('\'); continue; } // Handle specific escape sequences switch (cp) { case 'r': newstr.append('\r'); break; case 'n': newstr.append('\n'); break; case 'f': newstr.append('\f'); break; // Handle other escape sequences as needed // ... } saw_backslash = false; } // Append any remaining characters if (saw_backslash) { newstr.append('\'); } return newstr.toString(); }
このカスタム関数は、Commons Lang メソッドでサポートされていないものを含む、さまざまなエスケープ シーケンスを処理します。
追加の考慮事項:
以上がJava 文字列リテラルを効果的にエスケープ解除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。