Spezielle Zeichen \0 {NUL} in Java
Gewusst wie: ersetzen von \0 (NUL) in der Zeichenfolge?
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());
Dem obigen code wird gedruckt, 12 > 11 in der Konsole. Oops, Was ist passiert?
String e = c.replace("\0", "");
System.out.println(e); //just print 2(a bad character)2yyyy06mm
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren string
"2\0\0\0012yyyy06mm"
startet nicht2 {NUL} {NUL} {NUL} 0 1 2
, sondern enthält2 {NUL} {NUL} {SOH} 2
.Den
\001
wird behandelt als eine einzelne ASCII 1-Zeichen (SOH
) und nicht alsNUL
gefolgt von1 2
.Das Ergebnis ist, dass nur zwei Zeichen werden entfernt, nicht drei.
Ich glaube nicht, dass es irgendeine Art und Weise zu repräsentieren die Ziffern einen abgekürzten oktale escape andere als durch das brechen der string auseinander:
oder alternativ festlegen, dass alle drei Ziffern in der (letzten) oktale escape, so dass die folgenden Ziffern sind nicht so auszulegen, als Teil der oktale escape:
Sobald Sie das getan haben, ersetzen
"\0"
wie pro Ihre Linie:einwandfrei funktionieren wird.
\001
immer noch eingebettet sind (zwischen den zwei "2"s) ist unsichtbar. Der springende Punkt ist, dass die Zeichenfolgec
dass Sie nicht enthalten was Sie denken, es tut.c
- die.replace("\0", ...)
ist in Ordnung.\001
ist ein Charakter, nicht 2, 3 oder 4, es kann auch geschrieben werden als\u0001
das ist immer noch ein Zeichen. Hinweis: der Raum kann geschrieben werden als\040
oder\u0020
aber es ist immer ein Zeichen. Sie ersetzen nicht nur einen Teil der Zeichen, und Sie können nicht bestimmen, wie wurde es definiert.