問題は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
します。