2012-12-13 17 views
9

Dize'de \ 0 (NUL) nasıl değiştirilir?Java'da özel karakterler 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()); 

Yukarıdaki kod, konsolda 12> 11 basacaktır. Oops, ne oldu?

String e = c.replace("\0", ""); 
System.out.println(e);  // just print 2(a bad character)2yyyy06mm 

cevap

14

Sizin dize "2\0\0\0012yyyy06mm"2 {NUL} {NUL} {NUL} 0 1 2 başlatmak, ancak bunun yerine 2 {NUL} {NUL} {SOH} 2 içeren etmez.

\001

tek bir ASCII 1 karakteri ( SOH) olup 1 2 ardından NUL gibi muamele edilir.

Sonuç olarak, yalnızca iki karakter kaldırılıyor, üç değil. dönüşümlü

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

ya, sekizli öyle kaçmak (son) her üç basamak belirtin: ben ayrı dize kırarak daha kısaltılmış octal escape diğer aşağıdaki basamakları temsil herhangi bir yolu yoktur sanmıyorum

aşağıdaki basamak sekizlik kaçış parçası olarak yorumlanır değildir:

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

sen yaptıktan sonra, bu senin satıra kadar "\0" değiştirilmesi:

doğru şekilde çalışacaktır.

+0

Merhaba, yardım için tls. Dize c = "2 \ 0 \ 0 \ 0012yyyy06mm"; \t \t Dize e = c.replace ("\ 0", ""); \t \t System.out.println (e); \t \t \t \t // sadece yazdır 22yyyy06mm – user1900556

+1

@ user1900556 evet, çünkü hala orada yerleşik olan '\ 001' (iki "2" s arasında) görünmez. Bütün mesele, sahip olduğunuz "c" dizgesinin sizin düşündüğünüz şeyi içermediğidir. – Alnitak

+0

Yolu yok mu? Başka nasıl yapılabilir? – user1900556

İlgili konular