添加“\ 0”(null)后是否可以向字符串添加数据?

我有一个我正在创建的字符串,我需要在字符串中添加多个“\ 0”(空)字符。 在每个空字符之间,是其他文本数据(Just ASCII字母数字字符)。

我的问题是,在J2SE中添加第一个null(\ 0)时,java似乎确定它是一个字符串终止符(类似于C ++),并忽略所有其他附加的数据。 不会引发错误,只会忽略尾随数据。 我需要在字符串中的null之后强制添加其他尾随数据。 我必须为我支持的遗留数据库执行此操作。

我试图对字符串进行编码/解码,希望像%00这样的东西会欺骗字符串行为的解释,但是当我重新编码字符串时,Java会再次看到空字符,并在第一个空字符后删除所有数据。

更新:这是相关的代码段。 是的,我正在尝试使用Strings 。 我打算尝试使用字符,但我仍然需要将它作为字符串保存到数据库中,所以我怀疑我最终会遇到同样的问题。

一些背景。 我通过HTTPpost接收数据“\ n”。 我需要删除换行符并用“\ 0”替换它们。 “ debug ”方法只是一个执行System.out.println的简单方法。

  String[] arrLines = sValue.split("\n"); for(int k=0;k<arrLines.length;k++) { if (0<k) { sNewValue += "\0"; } sNewValue+= arrLines[k]; debug("New value =" + sNewValue); } 

sNewValue是一个String,它被提交到数据库,需要以String的forms完成。 当我在控制台中每次迭代后显示sNewValue的当前值时,我观察到的是这样的:

input是value1 \ nValue2 \ nValue3控制台中的输出是通过此代码提供给我的

 value1 value1 value1 

我在期待

 value1 value1 value2 value1 value2 value3 

在value1,value2和value3之间分别使用不可打印的null。 请注意,实际保存回数据库的值也只是“value1”。 因此,它不仅仅是一个控制台显示问题。 \ 0之后的数据被忽略。

强烈怀疑这与字符串本身的文本无关 – 我怀疑它是如何被显示的。 例如,试试这个:

 public class Test { public static void main(String[] args) { String first = "first"; String second = "second"; String third = "third"; String text = first + "\0" + second + "\0" + third; System.out.println(text.length()); // Prints 18 } } 

这打印18,显示所有字符都存在。 但是,如果您尝试在UI标签中显示text ,我只会first看到它并不会感到惊讶。 (在相当弱的调试器中也是如此。)

同样,您应该能够使用:

  char c = text.charAt(7); 

现在c应该是'e' ,这是“second”的第二个字母。

基本上,我希望Java的核心根本不关心它包含U + 0000的事实。 就Java而言,它只是另一个角色。 它仅在与本机代码(例如显示器)的边界处可能导致问题。

如果这没有帮助,请准确说明您观察到的内容 – 这是什么让您认为其余数据未被追加。

编辑:另一种诊断方法是打印出字符串中每个字符的Unicode值:

 for (int i = 0; i < text.length(); i++) { System.out.println((int) text.charAt(i)); } 

我建议你使用char[]List因为它听起来你并没有真正使用String (真正的String通常不包含空值或其他不可打印的字符)。

StringBuffer类的行为相同吗?

由于“\ 0”会造成一些麻烦,我建议不要使用它。 在将字符串实际写入数据库时​​,我会尝试用“\ 0”替换一些更好的分隔符

这是因为\是Java中的转义字符(与许多C相关语言中一样),您需要使用附加\来转义它,如下所示。

 String str="\\0Java language"; System.out.println(str); 

你应该能够在控制台上显示\ 0Java语言