java - Java 中的特殊字符\0 {NUL}

标签 java string null-terminated

如何替换String中的\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

最佳答案

您的字符串 "2\0\0\0012yyyy06mm" 不以 2 {NUL} {NUL} {NUL} 0 1 2 开头,而是包含 2 {NUL} {NUL} {SOH} 2

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

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

我认为没有任何方法可以表示缩写的 octal escape 之后的数字除了将字符串分开:

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

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

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

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

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

将正常工作。

关于java - Java 中的特殊字符\0 {NUL},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13857726/

相关文章:

c# - 程序代码主体中元素的首选顺序是什么?为什么?

c# - 将此行放入 excel.Formula "=IF(C4 = "x";1;0 )"isnt working because of double ` ""`

r - 比较两个大字符串向量花费的时间太长(删除停用词)

java - 在Java中的curl命令字符串中传递Json值中的空格

c++ - sgetn 不为空终止字符串

c - 字符串中的 C 字符串指针如何​​以空值终止?

java - 在 Java EE 应用程序中锁定

java - Mockito:使用 "thenReturn"中的方法返回模拟不起作用

java - 托管 Bean 注销不起作用