10

如何替换字符串中的 \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
4

1 回答 1

15

您的字符串"2\0\0\0012yyyy06mm"没有开始2 {NUL} {NUL} {NUL} 0 1 2,而是包含2 {NUL} {NUL} {SOH} 2.

\001视为单个 ASCII 1 字符 ( SOH),而不是NUL后跟1 2.

结果是只删除了两个字符,而不是三个。

我认为除了将字符串分开之外,没有任何方法可以表示缩写八进制转义后的数字:

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

或者,在(最后一个)八进制转义中指定所有三个数字,以便以下数字不会被解释为八进制转义的一部分:

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

"\0"完成后,根据您的行替换:

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

将正常工作。

于 2012-12-13T10:25:20.560 回答