Java字符串的奇怪行为

6
我有两个字符串变量ticker和detail。我想将这两个字符串在同一行中打印出来,但是一直无法成功。我尝试了很多不同的方法,为排除未初始化字符串的可能性,我尝试将它们分别打印在不同的行中... 这样可以做到。这个示例可以工作... 除了输出需要在同一行上。
            System.out.println(ticker);
            System.out.println(detail);

输出结果如下:

IWM
|0#0.0|0#0.0|0#-4252#386|
GLD
|0#0.0|0#0.0|0#-4704#818|

当我试图以多种方式将输出放入一行中时,我只得到了股票代码...详细字符串只是没有被打印出来...无论是在控制台还是文件中都没有。以下是一些产生相同结果的示例代码片段:
尝试1:
 System.out.println(ticker.concat(detail));

尝试2:

System.out.println(ticker+detail);

第三次尝试:

StringBuffer sb = new StringBuffer();
sb.append(ticker);
sb.append(detail);
System.out.print(sb.toString());

尝试 4:
System.out.print(ticker);
System.out.println(detail);

在上述所有尝试中,我得到了以下输出...好像详细部分被忽略了:
GOLD
BBL
SI

这些症状可能是什么原因引起的?有办法将这两个字符串打印在同一行吗?

1
我不明白第一个输出和最后一个输出有什么关系。它们根本不包含相同的内容。你可能没有打印出你认为你正在打印的东西。尝试制作一个SSCCE(http://sscce.org/)。 - JB Nizet
1
你能向我们展示“ticker”和“detail”字符串的实际内容吗?你可以调试代码并在那里获取文本... - everton
1
这是什么意思?有虚构的时间吗? - JB Nizet
我的意思是内容,比如:IWM\n|0#0... - everton
这段代码会输出什么?'System.out.println(detail.length());' ? - Paul
显示剩余2条评论
2个回答

7

这可能更适合作为注释,但那样我就无法编写所需的代码片段。

这些字符串来自哪里? 它们来自一个包含一些奇怪控制字符的文件吗? 如果您不是自己创建字符串,应该检查它们是否包含嵌入的垂直回车或其他奇怪的字符。对于detailticker字符串,可以像这样执行操作:

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

并查看是否有任何非ASCII范围内的内容。


1
那是一个有趣的想法...我会运行测试。 - fodon
1
有一堆0...我猜系统没有删除这些0并且认为它们是字符串的终止符。我会考虑这个想法。是否有标准库例程可以去掉尾随的零? - fodon
ASCII NUL 绝对算是一种奇怪的字符!如果你在创建 Java 字符串对象之前将其去除,我敢打赌你的问题就会消失。 - Ernest Friedman-Hill
1
你正在使用字节值来表示字符,如果你输入了错误的值,这不是系统的问题。 - Viruzzo
1
Java字符串中包含字节0x00并没有问题,所以为什么构造函数需要忽略它们呢? - Mark Rotteveel
显示剩余4条评论

2

可能第一个字符串以"\n"结尾,即换行符(换行符)字符('\u000A')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接