当前位置: 首页 > 面试题库 >

添加“ \ 0”(空)之后是否可以将数据添加到字符串?

阙星渊
2023-03-14
问题内容

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

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

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

更新:这是相关的代码片段。是的,我正在尝试使用Strings。我打算尝试使用char,但是我仍然必须将其作为字符串保存到数据库中,因此我怀疑最终还是会遇到同样的问题。

一些背景。我正在通过具有“ \ n”的HTTP帖子接收数据。我需要删除换行符并将其替换为“ \ 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是一个字符串,已提交给数据库,需要作为字符串来完成。sNewValue在控制台中每次迭代后显示当前值时,我正在观察的内容是这样的:

输入为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,表明所有字符都存在。但是,如果您尝试text在UI标签中显示,只看到,我不会感到惊讶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));
}


 类似资料:
  • 本文向大家介绍是否可以将HTML5验证添加到Visual Studio?,包括了是否可以将HTML5验证添加到Visual Studio?的使用技巧和注意事项,需要的朋友参考一下 对于HTML5验证,您需要在Visual Studio中安装IntelliSense和验证支持。Visual Studio 2012支持HTML5。 VS 2010具有IntelliSense支持,但是VS 2012添加

  • 问题内容: 我将$ data作为JSON编码的数据,并且有以下字符串: 需要将其添加到$ data中,以便我可以将其作为json字符串从中读取。 我怎样才能做到这一点? 问题答案: 您需要先添加新的键/值,然后添加它。

  • 问题内容: 我是Java新手,所以我几乎不需要帮助 我有 我想向此数组(脚本)添加新的字符串(string1,string2)作为示例 我想在以后的阶段中不添加新字符串 我该怎么办? 问题答案: 您无法在Java中调整数组的大小。 声明数组的大小后,它将保持固定。 相反,您可以使用具有动态大小的对象,这意味着您无需担心其大小。如果数组列表的大小不足以容纳新值,则它将自动调整大小。

  • 问题内容: 我在Java程序中有两个字符串,我想以某种方式混合以形成两个新字符串。为此,我必须从每个字符串中提取一些构成字符并将其添加以形成新的字符串。我有这样的代码(this.eka和this.toka是原始字符串): 我正在获取.charAt(x)部分的数字,那么如何将字符转换为字符串? 问题答案: 只使用永远使用代替 例如,当位置arent不是固定值而变量 其中x,y,z是保存从中提取位置的

  • 问题内容: 我想在过滤器/ servlet中拦截请求,并向其中添加一些参数。但是,该请求不会公开’setParameter’方法,并且该参数映射在被操纵时会抛出错误,表明已被锁定。有没有其他我可以尝试的方法? 问题答案: 子类化并覆盖方法。该类的描述为: 提供HttpServletRequest接口的便捷实现,希望希望使请求适应Servlet的开发人员可以将其子类化。 在过滤器中,将请求包装在子类

  • 问题内容: 我试图弄清楚如何将以下数据添加到我的json对象。有人可以告诉我该怎么做。 网站范例 我的JSONObject需要合并以上示例。 问题答案: 为了得到这个结果: 拥有与以下相同的数据: 您可以使用以下代码: