在java中,数组不重写 toString()
,因此,如果您尝试直接打印一个,您将得到 className
+“@”+的十六进制 hashCode
数组的 Object.toString()
:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
但通常我们想要的是 [1, 2, 3, 4, 5]
. 最简单的方法是什么?以下是一些输入和输出示例:
// Array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};
//output: [1, 2, 3, 4, 5]
// Array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};
//output: [John, Mary, Bob]
30条答案
按热度按时间iaqfqrcu1#
因为Java5可以使用
Arrays.toString(arr)
或者Arrays.deepToString(arr)
对于数组中的数组。请注意Object[]
版本调用.toString()
在数组中的每个对象上。输出甚至按照您要求的方式进行修饰。示例:
简单数组:
输出:
嵌套数组:
输出:
双数组:
输出:
int数组:
输出:
flvlnr442#
要添加到所有答案中,还可以选择将对象打印为json字符串。
使用Jackson:
使用gson:
0pizxfdo3#
如果数组是char[]类型,还有一种方法:
印刷品
kjthegm64#
这被标记为用于打印字节[]的副本。注意:对于字节数组,可能有其他合适的方法。
如果它包含iso-8859-1字符,则可以将其打印为字符串。
或者如果它包含utf-8字符串
或者如果你想把它打印成十六进制。
或者如果你想把它打印成base64。
或者如果要打印有符号字节值的数组
或者如果要打印一个无符号字节值数组
y4ekin9u5#
7vux5j2d6#
Arrays.deepToString(arr)
只在一行打印。为了把一张表打印成二维表,我必须这样做:
好像
Arrays.deepToString(arr)
方法应该采用分隔符字符串,但不幸的是它没有。relj7zay7#
如果您使用的是java 1.4,则可以执行以下操作:
(当然,这也适用于1.5以上版本。)
tzcvj98z8#
在jdk1.8中,可以使用聚合操作和lambda表达式:
xkftehaa9#
无论您使用哪个jdk版本,它都应该始终有效:
如果
Array
包含对象。如果Array
如果包含基元类型,则可以使用 Package 类而不是将基元直接存储为。。例子:
替换为:
更新:
对!值得一提的是,将数组转换为对象数组或使用对象的数组代价高昂,可能会减慢执行速度。这是java的一种特性,称为自动装箱。
所以只用于印刷目的,不应使用。我们可以制作一个函数,它以数组作为参数,并将所需的格式打印为
ehxuflar10#
不过,知道这一点很好,至于“总是先检查标准库”,我从来没有偶然发现
Arrays.toString( myarray )
--因为我专注于myarray的类型,所以我想看看如何做到这一点。我不想遍历这个东西:我想要一个简单的调用,使它与我在eclipse调试器和myarray中看到的类似,而tostring()没有做到这一点。xkftehaa11#
如果使用commons.lang库,我们可以:
ArrayUtils.toString(array)
```int[] intArray = new int[] {1, 2, 3, 4, 5};
String[] strArray = new String[] {"John", "Mary", "Bob"};
ArrayUtils.toString(intArray);
ArrayUtils.toString(strArray);
{1,2,3,4,5}
{John,Mary,Bob}
k7fdbhmy12#
在Java8中,这很简单。有两个关键字
流:
Arrays.stream(intArray).forEach
方法参考:::println
```int[] intArray = new int[] {1, 2, 3, 4, 5};
Arrays.stream(intArray).forEach(System.out::println);
int[] intArray = new int[] {1, 2, 3, 4, 5};
Arrays.stream(intArray).forEach(System.out::print);
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(intArray));
qxgroojn13#
如果您运行的是jdk8。
输出:
jfewjypa14#
在我看来,使用正则for循环是打印数组最简单的方法。这里有一个基于intarray的示例代码
它的输出是你的1,2,3,4,5
ecr0jaav15#
我最近在vanilla#java上看到了这个帖子。写起来不太方便
Arrays.toString(arr);
,然后导入java.util.Arrays;
总是。请注意,这不是一个永久性的解决办法。只是一个可以使调试更简单的黑客。
直接打印数组将给出内部表示和哈希代码。现在,所有的班级都有
Object
作为父类型。那么,为什么不破解Object.toString()
? 未经修改,对象类如下所示:如果更改为:
只需将以下内容添加到命令行,即可将此moded类添加到类路径中:
-Xbootclasspath/p:target/classes
.现在,随着
deepToString(..)
自Java5以来toString(..)
可以很容易地更改为deepToString(..)
添加对包含其他数组的数组的支持。我发现这是一个非常有用的黑客,如果java能简单地添加这个,那就太好了。我理解使用非常大的数组的潜在问题,因为字符串表示可能有问题。也许会传一些像
System.out
或者PrintWriter
对于这种不测事件。