How to replace \0 (NUL) in the String?
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());
The above code will print 12 > 11 in console. Oops, What happened?
String e = c.replace("\0", "");
System.out.println(e); // just print 2(a bad character)2yyyy06mm
The minimum value char can hold is 'u0000' which is a Unicode value denoting 'null' or 0 in decimal. The maximum value it can hold is 'uffff' or 65,535 inclusive. The minimum value which is 'u0000' is also the default value of char.
Using '\0' We will assign char variable ch with '\0' special character. '\0' represents null.
Special characters are those characters that are neither a letter nor a number. Whitespace is also not considered a special character.
Your string "2\0\0\0012yyyy06mm"
does not start 2 {NUL} {NUL} {NUL} 0 1 2
, but instead contains 2 {NUL} {NUL} {SOH} 2
.
The \001
is treated as a single ASCII 1 character (SOH
) and not as a NUL
followed by 1 2
.
The result is that only two characters are being removed, not three.
I don't think there's any way to represent digits following an abbreviated octal escape other than by breaking the string apart:
String c = "2" + "\0\0\0" + "012yyyy06mm";
or alternately, specify all three digits in the (last) octal escape such that the following digits are not interpreted as being part of the octal escape:
String c = "2\000\000\000012yyyy06mm";
Once you've done that, replacing "\0"
as per your line:
String e = c.replace("\0", "");
will work correctly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With