我有一个相对简单的控制台输出用于调试目的,因为我试图找出与此问题无关的错误。我的代码如下:
System.out.println("info: " + element + " || " + getIDforName(element));
String类型的变量element
取自cmd输出,可能是空/ null。因此,我希望它输出类似info: null || null
的内容。然而,它并没有这样做,但输出这个:|| null
这真的令我感到困惑。
如果由于某种原因不能完全写出它或者它会写info: ||
,我会解释它,但实际的输出对我没有意义,因为它不能只跳过一部分。
所以我的问题是:为什么会发生这种情况,我该如何解决?如果需要任何其他代码,我会尝试提供它。
编辑: getIDforName(字符串名称)是一种比较某些字符串的方法,如果存在匹配字符串,则返回字符串。
答案 0 :(得分:1)
我在运行时使用调试器检查了element
的内容,调试器给了我一个null
的值,并打印出Tom指出的byteArray值,返回正确的值,因为它应该是(输入[76, 111, 103, 111, 110]
的字符串的字节,例如Logon
。
因此,出于纯粹的好奇心,我使用了element
中包含的字符串的trim()方法,现在它以某种方式运行。即使其他测试都没有产生表明会有空格的结果。
<强>更新强>
我遇到此问题的原因如下:变量的初始值来自Windows cmd,因此由\r\n
分隔,但我只将其拆分为\n
,因此在最后一项上在JList中,它只是将编写好的字符串写回来,并将\r
写入控制台。使用System.lineSeparator()
进行拆分解决了问题,而不是使用trim()来解决症状。非常感谢汤姆指出这一点。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以做的最简单的事情是首先验证element
的内容,例如测试它是否真的为空。它很可能不是。 E.g。
System.out.println("info: " + "\b\b\b\b\b\b" + " || " + null);
可能会产生
|| null
所以我怀疑element
包含"\b\b\b\b\b\b"
或任何其他控制字符,正如其他人所建议的那样。
答案 3 :(得分:0)
可能这种行为是由于一个空字符串&#34;&#34;不是空的。
试试这个:
System.out.println("info: " + (element.length() == 0 ? null : element) + " || " + element);
在System.out
中传递元素之前测试null