ang*_*guy 8 java string terminator
我有一个我正在创建的字符串,我需要在字符串中添加多个"\ 0"(空)字符.在每个空字符之间,是其他文本数据(Just ASCII字母数字字符).
我的问题是,在J2SE中添加第一个null(\ 0)时,java似乎确定它是一个字符串终止符(类似于C++),并忽略所有其他附加数据.不会引发错误,只会忽略尾随数据.我需要在字符串中的null之后强制添加其他尾随数据.我必须为我支持的遗留数据库执行此操作.
我试图对字符串进行编码/解码,希望像%00这样的东西会欺骗字符串行为的解释,但是当我重新编码字符串时,Java会再次看到空字符,并在第一个空字符后删除所有数据.
更新:这是相关的代码段.是的,我正在尝试使用Strings.我打算尝试使用字符,但我仍然需要将它作为字符串保存到数据库中,所以我怀疑我最终会遇到同样的问题.
一些背景.我通过HTTP帖子接收数据"\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);
}
Run Code Online (Sandbox Code Playgroud)
sNewValue是一个String,它被提交到数据库,需要以String的形式完成.当我sNewValue在控制台中每次迭代后显示当前值时,我观察到的是这样的:
input是value1 \nValue2 \nValue3控制台中的输出是通过此代码提供给我的
value1
value1
value1
Run Code Online (Sandbox Code Playgroud)
我期待着
value1
value1 value2
value1 value2 value3
Run Code Online (Sandbox Code Playgroud)
在value1,value2和value3之间分别使用不可打印的null.请注意,实际保存回数据库的值也只是"value1".因此,它不仅仅是一个控制台显示问题.\ 0之后的数据被忽略.
Jon*_*eet 14
我强烈怀疑这与字符串本身的文本无关 - 我怀疑它是如何显示的.例如,试试这个:
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
}
}
Run Code Online (Sandbox Code Playgroud)
这打印18,显示所有字符都存在.但是,如果您尝试text在UI标签中显示,我不会感到惊讶first.(在相当弱的调试器中也是如此.)
同样,您应该可以使用:
char c = text.charAt(7);
Run Code Online (Sandbox Code Playgroud)
现在c应该是'e'哪个是"第二个"的第二个字母.
基本上,我希望Java的核心根本不关心它包含U + 0000的事实.就Java而言,它只是另一个角色.它仅在与本机代码(例如显示器)的边界处可能导致问题.
如果这没有帮助,请准确说明您观察到的内容 - 它是什么让您认为其余数据未被追加.
编辑:另一种诊断方法是打印出字符串中每个字符的Unicode值:
for (int i = 0; i < text.length(); i++) {
System.out.println((int) text.charAt(i));
}
Run Code Online (Sandbox Code Playgroud)