ホームページ >Java >&#&チュートリアル >Java 文字列リテラルを効果的にエスケープ解除する方法

Java 文字列リテラルを効果的にエスケープ解除する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-16 03:06:13106ブラウズ

How to Effectively Unescape Java String Literals?

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

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