文字列の\ 0(NUL)を置き換える方法は?
String b = "2012yyyy06mm"; // sth what i want
String c = "2\0\0\0012yyyy06mm";
String d = c.replaceAll("\\\\0", ""); // not work
String e = d.replace("\0", ""); // er, the same
System.out.println(c+"\n"+d+"\n"+e);
String bb = "2012yyyy06mm";
System.out.println(b.length() + " > " +bb.length());
上記のコードは、コンソールで12> 11を出力します。おっと、どうしたの?
String e = c.replace("\0", "");
System.out.println(e); // just print 2(a bad character)2yyyy06mm
文字列"2\0\0\0012yyyy06mm"
は2 {NUL} {NUL} {NUL} 0 1 2
で始まりませんが、代わりに2 {NUL} {NUL} {SOH} 2
を含みます。
\001
は単一のASCII 1文字(SOH
)として扱われ、NUL
の後に1 2
が続くものとしては扱われません。
その結果、3文字ではなく、2文字のみが削除されます。
文字列を分割する以外に、省略形 8進数のエスケープ に続く数字を表す方法はないと思います。
String c = "2" + "\0\0\0" + "012yyyy06mm";
または、次の桁が8進エスケープの一部として解釈されないように、(最後の)8進エスケープの3桁すべてを指定します。
String c = "2\000\000\000012yyyy06mm";
それが済んだら、次のように"\0"
を置き換えます。
String e = c.replace("\0", "");
正しく動作します。