10

文字列の \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
4

1 に答える 1

15

文字列"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 進エスケープで 3 桁すべてを指定して、次の数字が 8 進エスケープの一部として解釈されないようにします。

String c = "2\000\000\000012yyyy06mm";

それが終わったら、"\0"あなたの行に従って置き換えます:

String e = c.replace("\0", "");

正しく動作します。

于 2012-12-13T10:25:20.560 に答える