我有一个字节数组,如下所示:
[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
的值失败?
答案 0 :(得分:0)
试试这个
System.out.println(Arrays.toString(byteArray));
答案 1 :(得分:0)
试试这个。
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));
答案 2 :(得分:0)
您的字节数组主要是不可打印的字符,其中混合了几个随机字母。 但你需要的只是
String myString = new String(byteArray);
将为您提供有效的字符串。
尝试以下代码,因为它可能会更好地说明您遇到的问题。
for (char c : new String(byteArray).toCharArray())
{
System.out.printf("Character: %s Hex: %02x \r",c,(int)c);
}
答案 3 :(得分:0)
您可以使用 String(byte[],Charset)
构造函数并指定一个 Charset
用于解码此 bytes
数组:
System.out.println(new String(byteArray, StandardCharsets.UTF_8));
在大多数情况下,StandardCharsets.UTF_8
是默认字符集。