【问题标题】:Java Eclipse - string wrapping for System.out.println()Java Eclipse - System.out.println() 的字符串包装
【发布时间】:2014-03-19 08:36:09
【问题描述】:

我向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);
}

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

【问题讨论】:

  • 您知道某些编码不是每个字符一个字节,对吧?你使用什么编码,为什么不使用String(byte[], Charset)构造函数?
  • System.out.print(new String(byteArray));怎么样
  • @MohammadAdil 我也在尝试。但仍然没有出现
  • @Rop 我试过 System.out.print((char) b);在我的 Eclipse 控制台中它工作正常。你的日食一定有问题。 Mohammeds 的解决方案也奏效了。
  • @kai 我猜到了,但我不知道我的 Eclipse 出了什么问题

标签: java eclipse string bytearray system.out


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试着去做

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

    方法print 可能会被缓冲而不显示,而您不打印\n

    【讨论】:

      【解决方案3】:

      我会尝试排除不可打印的字符,例如 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
      

      【讨论】:

        【解决方案4】:

        问题肯定出在您的环境中。

        我的 Eclipse 控制台在您的第一个循环中输出:

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

        【讨论】:

          【解决方案5】:

          控制台对null character \u0000(通常用作a string terminator)反应不佳。

          Eclipse 使用 SWT,它经常在可能的情况下使用本机控件,因此可能是底层 UI 工具包或 SWT 使用它的方式存在缺陷。

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

          我会包括:

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

          【讨论】:

            猜你喜欢
            • 2012-02-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-26
            相关资源
            最近更新 更多