Java Eclipse - System.out.println()的字符串换行

时间:2014-03-19 08:36:10

标签: java eclipse string bytearray system.out

我向this problem寻求帮助,当我想从表中转换字节

`[0, 0, 0, 0, 0, 0, 0, 0, 122, 98, 117, 54, 46, 0, 0, 115, 122, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 121, 116, 117, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 107, 111, 98, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 42, 109, 111, 119, 40, 0, 0, 0, 0, 0, 0, 107, 111, 98, 0, 0, 0, 0, 0, 98, 111, 40]`

成字符并打印此字符。当我做:

    for(byte b: byteArray){
        System.out.print((char) b);
    }

我的控制台上没有任何内容。甚至滚动条的长度也相同。 但是当我做的时候:

for(byte b: byteArray){
 System.out.println((char) b);
}

效果很好。 我认为这是日食问题,而不是代码。我取消选中限制控制台输出,但没有帮助。

5 个答案:

答案 0 :(得分:0)

我会尝试排除不可打印的字符,例如0

for(byte b: byteArray){
    System.out.print(b >= 32 ? (char) b : "");
}

您可以将所需的空白字符串替换为“?”或“[ascii_code]”......

我已经使用您的数据进行了测试,在我的Eclipse(OSX)中出现了两种情况,我的代码:

public static void main(String[] args) {
    byte[] bytes =
        { 0, 0, 0, 0, 0, 0, 0, 0, 122, 98, 117, 54, 46, 0, 0, 115, 122, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 121, 116, 117, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 107, 111, 98, 105, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 122, 42, 109, 111, 119, 40, 0, 0, 0, 0, 0, 0, 107, 111, 98, 0, 0, 0, 0, 0, 98, 111, 40 };
    System.out.println("Init...");
    for (byte b : bytes) {
        System.out.print((char) b);
    }
    System.out.println();
    System.out.println();
    for (byte b : bytes) {
        System.out.print(b >= 32 ? (char) b : "?");
    }
    System.out.println();
    System.out.println("End");
}

输出是:

Init...
zbu6.sz*tytul kobiz*mow(kobbo(

????????zbu6.??sz*???????????tytul?????????????????????? kobi????????????????????????????????????????????????????????????????????????????????????z*mow(??????kob?????bo(
End

答案 1 :(得分:0)

char为2字节,如果字节数超出范围-128到127,

答案 2 :(得分:0)

尝试做

for(byte b: byteArray){
    System.out.print((char) b);
}
System.out.println();

当您不打印print

时,方法\n可能会被缓冲而不会显示

答案 3 :(得分:0)

问题出在您的环境中。

我的eclipse控制台用你的第一个循环输出:

enter image description here

有趣的是,我无法复制/粘贴此输出。我认为它是\ 0字节错误。

答案 4 :(得分:0)

控制台对通常用作null charactera string terminator \u0000反应不佳。

Eclipse使用SWT,它经常使用本机控件,因此可能是底层UI工具包中存在缺陷或者SWT如何使用它。

之前已经报告过 - Bug 362957 - The Console does not display '\u0000' correctly - 因此您可能希望将输入添加到错误报告中并对其进行投票。

我会包括:

  • 操作系统/版本
  • Eclipse和SWT构建版本(查看插件目录)
    • 如果您对样式表做出任何更改(例如e4_default_gtk.css)
  • 平台UI工具包版本(如果适用)(例如GTK)
  • 字体 - see Preferences
  • Java版(可能不相关)