Java System.out.println()跳过值/输出不完整

Java System.out.println()跳过值/输出不完整,java,Java,出于调试目的,我有一个相对简单的控制台输出,因为我试图找出一个与此问题无关的错误。我的代码如下: System.out.println("info: " + element + " || " + getIDforName(element)); String类型的变量元素取自cmd输出,可能为空/null。因此,我希望它输出类似于info:null | | null的内容。然而,它并没有这样做,而是输出这样的内容:| | null,这确实让我感到困惑。 如果它出于某种原因不能完全编写它,或者它会

出于调试目的,我有一个相对简单的控制台输出,因为我试图找出一个与此问题无关的错误。我的代码如下:

System.out.println("info: " + element + " || " + getIDforName(element));
String类型的变量
元素
取自cmd输出,可能为空/null。因此,我希望它输出类似于
info:null | | null
的内容。然而,它并没有这样做,而是输出这样的内容:
| | null
,这确实让我感到困惑。 如果它出于某种原因不能完全编写它,或者它会编写
info:|
,我会不以为然,但实际输出对我来说毫无意义,因为它不能跳过一部分

所以我的问题是:为什么会发生这种情况,我该如何解决?如果需要任何额外的代码,我会尽力提供


EDIT:getIDforName(字符串名称)是一种比较某些字符串并在存在匹配字符串时返回字符串的方法

在元素类中重写“toString()”方法的简单方法

检查此线程:


您可以做的最简单的事情是首先验证
元素的内容,例如测试它是否真的为空。很可能不是。例如

System.out.println("info: " + "\b\b\b\b\b\b" + " || " + null);
可能产生

| | null


因此,我怀疑
元素
包含
“\b\b\b\b\b\b”
或其他人建议的任何其他控制字符。

这种行为可能是由于空字符串“”而不是空字符串

试试这个:

System.out.println("info: " + (element.length() == 0 ? null : element) + " || " + element);

在将元素传入系统之前测试null(用于输入的字符串字节,例如
[76、111、103、111、110]

因此,出于纯粹的好奇,我使用了
元素
中包含的字符串的方法,但不知怎么的,它现在可以工作了。尽管其他测试都没有结果表明会有空白

更新:



我出现此问题的原因如下:变量的初始值来自Windows cmd,因此由
\r\n
分隔,但我仅通过
\n
将其拆分,因此在JList的最后一项上,它只恢复了在将
\r
写入控制台之前写入的字符串。使用
System.lineSeparator()
的拆分解决了问题的根源,而不是使用trim()来解决症状。非常感谢Tom指出这一点。

什么是
元素
并给出
getIDforName(元素)的代码
!您应该在println->之前验证元素,查看它是否有值、是否为null等,并进行输出。否则,当它不为空时,为null,显示其他信息。如果为null,则显示其他基本信息…是否尝试使用除| |之外的其他分隔符?是否
元素
字符串化为包含换行符的内容?是否有
信息:在前一行?使用调试查看“内容”,但不应输出“信息:”字符串这不是Java的错。控制台真正打印的内容取决于控制台本身。例如
元素
包含
\r
,则某些控制台会忽略这一点,而其他控制台(如Windows控制台)会将光标移到行的开头,并用“| | null”覆盖“info:”.element已经是一个字符串。我的问题与
element
的值无关,而是为什么
信息:
不是由控制台输出的。哦,我明白了,我不明白。我在java测试中尝试了你的代码,它似乎工作得很好。输出是正确的,你能给我们更多信息吗?因此en empty
元素
字符串是导致“info:”在输出中丢失的原因(根据OP)?如果在
元素
等于
null
的情况下尝试此代码,您将得到
NullPointerException
。根据OP,这可能是一个错误。尝试在元素中打印某些内容可能会改变某些内容!此处没有任何可预测的内容,但OP希望获得
信息:null | null
。因此,您的代码应该be:
(null!=element&&element.isEmpty()?null:element)
。根据OP,您所连接的是true!关于最后一个参数
element
(我的代码中的一个输入错误),您可能想写“may products”,而不是“products”,因为取决于控制台,它如何处理控制字符。例如,IDEA控制台忽略了它们。我可以补充一点,我正在使用IDEA控制台。IntelliJ IDEA CEexact@Niklas您的问题出现在以下代码中:
System.out.println(“信息:”+“\r”+“| |”+null);
。如您问题的评论中所述,请检查您的字符串是否不包含
\r
,并尝试创建一个。我刚刚用调试器尝试了它。元素为
null
而不是
\r
。我正在处理MCV示例无法在MCV中复制它。但是trim()即使调试器说变量为
null
,并且byteArray具有实际值字母的正确值,也解决了该问题…好吧,我不会在这里停止。您的代码中的某个地方有问题,因此
元素
会获得意外值。因此,您应该尝试查找问题的源,而不是使用
trim()隐藏问题
。但是你想做什么取决于你。我完全同意,但是由于这个线程到目前为止没有给我合适的答案,我将推迟解决这个问题,直到我有足够的时间来考虑。让我猜猜,你是在Windows上工作吗?那么问题就很清楚了:P.Windows使用
\r\n
作为行分隔符。当你按u分割时唱
\n
,然后
\r
将保留在数组中的每个字符串上,
\r
将导致出现问题。使用<