1

Jre1.6を使用しています。次のコード行を実行しています。

文字列 unicodeValue = "\u001B"; text = text.replaceAll("" + character, unicodeValue);

ここで、テキストは、Unicode 値 '\u001B' の無効な XML 文字を含む文字列オブジェクトです。そのため、無効な XML 文字を Unicode 値に変換して XML に書き込みます。

しかし、text.replaceAll を実行すると、「\」が取り除かれ、文字が「u001B」に置き換えられます。

文字をユニコード値に置き換えた後、「\」を保持する方法を誰か提案できますか?

4

3 に答える 3

2

問題はstr.replaceAll(regex, repl)、同じものを返すように定義されていることです

Pattern.compile(regex).matcher(str).replaceAll(repl)

しかし、ドキュメントにreplaceAllは、

置換文字列にバックスラッシュ () とドル記号 ($) を使用すると、リテラル置換文字列として扱われる場合とは結果が異なる場合があることに注意してください。上記のように、ドル記号はキャプチャされたサブシーケンスへの参照として扱われる場合があり、バックスラッシュは置換文字列内のリテラル文字をエスケープするために使用されます。

したがって、これは、エスケープのいくつかの追加レイヤーを追加する必要があることを意味します。

public class Foo {

    public static void main(String[] args)
    {
        String unicodeValue = "\u001B";
        String escapedUnicodevalue = "\\\\u001B";
        String text = "invalid" + unicodeValue + "string";

        text = text.replaceAll(unicodeValue, escapedUnicodevalue);

        System.out.println(text);
    }
}

必要に応じて印刷invalid\u001Bstringします。

于 2013-01-31T05:17:45.763 に答える
0

これは完璧に実行されました。私はそれをテストしました。

    char character = 0x1b;
    String unicodeValue = "\\\\u001B"; 
    String text = "invalid " + character + " string";
    System.out.println(text);
    text = text.replaceAll("" + character, unicodeValue);
    System.out.println(text);

RegExの概念を使用しただけです。

于 2013-01-31T05:49:06.137 に答える
0

二重スラッシュ\\を使用してエスケープを表し\ます:

String unicodeValue = "\\u001B"; text = text.replaceAll("" + character, unicodeValue);
于 2013-01-31T05:18:16.497 に答える