【问题标题】:System.out.print of string without 'ln'System.out.print 不带 'ln' 的字符串
【发布时间】:2014-04-25 01:17:23
【问题描述】:

我有一个如下所示的字节数组:

[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(new String(byteArray));

但是没有输出。接下来,我尝试了以下代码:

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

但同样没有输出。但是当我尝试以下代码时:

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

我能够看到这些值。

我的问题是,为什么我不能创建一个字符串,或者为什么第一次打印来自byteArray 的值失败了?

【问题讨论】:

  • 不,对我来说一切都很好......
  • 好吧,他们在我的电脑上都给出了相同的结果。唯一的区别是ln给了我很多行。
  • 你在任何地方都打过System.setOut()的电话吗?
  • 添加System.out.flush() 有帮助吗?

标签: java arrays string system.out


【解决方案1】:

试试这个

System.out.println(Arrays.toString(byteArray));

【讨论】:

    【解决方案2】:

    试试这个。

    byte[] bytes = new byte[]{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(new String(bytes));
    

    【讨论】:

      【解决方案3】:

      您的字节数组大多是不可打印的字符,其中混有一些随机字母。但您只需要:

      String myString = new String(byteArray);
      

      这会给你一个有效的字符串。

      试试下面的代码,也许它会更好地说明你遇到的问题:

      for (char c : new String(byteArray).toCharArray()) {
          System.out.printf("Character: %s Hex: %02x \n", c, (int) c);
      }
      

      【讨论】:

      • 我想把我的字节数组转换成字符。但是在使用了你的建议之后,什么都没有出现
      • 在您澄清后编辑了我的答案,希望能为您解决问题。
      【解决方案4】:

      您可以使用String(byte[],Charset) 构造函数并指定Charset 用于解码此bytes 数组:

      System.out.println(new String(byteArray, StandardCharsets.UTF_8));
      

      在大多数情况下,StandardCharsets.UTF_8 是默认字符集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        相关资源
        最近更新 更多