2012-12-13 4 views
9

文字列に\ 0(NUL)を置き換える方法は?Javaの特殊文字 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 

答えて

14

あなたの文字列"2\0\0\0012yyyy06mm"2 {NUL} {NUL} {NUL} 0 1 2を開始するが、代わりに2 {NUL} {NUL} {SOH} 2が含まれていません。

\001が単一ASCII 1文字(SOH)などとしない1 2続いNULとして扱われます。

その結果、削除されるのは2文字だけで3文字ではありません。

私は離れて、文字列を破壊する以外略しoctal escape次の桁を表現する方法がないと思う:

String c = "2" + "\0\0\0" + "012yyyy06mm"; 

または交互に、そのように(最後の)進のエスケープにすべての3つの数字を指定します以下の数字は8進数のエスケープの一部であると解釈されていません。

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

あなたが完了したら、そのご一行として"\0"を置き換える:

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

は正しく動作します。

+0

こんにちは。文字列c = "2 \ 0 \ 0 \ 0012yyyy06mm"; \t \t文字列e = c.replace( "\ 0"、 ""); \t \t System.out.println(e); \t \t \t \t // 2200yy06mm – user1900556

+1

@ user1900556はい、その中にまだ埋め込まれている '\ 001'(2つの" 2 "の間)は見えないので、印刷します。全体のポイントは、あなたが持っている文字列 'c'はあなたが思うものを含んでいないということです。 – Alnitak

+0

方法はありませんか?どのようにそれを行うことができますか? – user1900556