特殊字符\\ {0} NUL在Java中(Special characters \\0 {NUL}

2019-08-04 00:49发布

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

Answer 1:

你的字符串"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", "");

将正常工作。



文章来源: Special characters \\0 {NUL} in Java