2012-12-13 15 views
9

Jak zamienić \ 0 (NUL) w ciągu?Znaki specjalne 0 {NUL} w języku Java

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()); 

Powyższy kod wyświetli 12> 11 w konsoli. Ups, co się stało?

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

Odpowiedz

14

ciąg "2\0\0\0012yyyy06mm" nie rozpocznie 2 {NUL} {NUL} {NUL} 0 1 2, lecz zawiera 2 {NUL} {NUL} {SOH} 2.

The \001 jest traktowany jako jeden ASCII 1 znaku (SOH), a nie jako NUL następnie 1 2.

Powoduje to usunięcie tylko dwóch znaków, a nie trzech.

Nie sądzę, istnieje jakikolwiek sposób do reprezentowania cyfr po skrócona octal escape inny niż poprzez złamanie ciąg siebie:

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

lub na przemian, określić wszystkie trzy cyfry w (ostatni) ósemkowy uciec takie, że następujące cyfry nie są interpretowane jako część ósemkowej ewakuacji:

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

gdy już to zrobisz, zastępując "\0" jak na swój line:

będzie działać poprawnie.

+0

Witam, tls o pomoc. Ciąg c = "2 \ 0 \ 0 \ 0012yyyy06mm"; \t \t String e = c.replace ("\ 0", ""); \t \t System.out.println (e); \t \t \t // wystarczy wydrukować 22yyyy06mm – user1900556

+1

@ user1900556 tak, ponieważ '\ 001' nadal w nim osadzone (między dwoma" 2 ") jest niewidoczne. Chodzi o to, że ciąg "c", który masz, nie zawiera tego, co myślisz, że robi. – Alnitak

+0

Nie ma mowy? Jak inaczej można to zrobić? – user1900556