在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条答案
按热度按时间njthzxwz1#
总是先检查标准库。
然后尝试:
或者如果您的数组包含其他数组作为元素:
ia2d9nvy2#
在java 8中:
tyu7yeag3#
我最近在vanilla#java上看到了这个帖子。写起来不太方便
Arrays.toString(arr);
,然后导入java.util.Arrays;
总是。请注意,这不是一个永久性的解决办法。只是一个可以使调试更简单的黑客。
直接打印数组将给出内部表示和哈希代码。现在,所有的班级都有
Object
作为父类型。那么,为什么不破解Object.toString()
? 未经修改,对象类如下所示:如果更改为:
只需将以下内容添加到命令行,即可将此moded类添加到类路径中:
-Xbootclasspath/p:target/classes
.现在,随着
deepToString(..)
自Java5以来toString(..)
可以很容易地更改为deepToString(..)
添加对包含其他数组的数组的支持。我发现这是一个非常有用的黑客,如果java能简单地添加这个,那就太好了。我理解使用非常大的数组的潜在问题,因为字符串表示可能有问题。也许会传一些像
System.out
或者PrintWriter
对于这种不测事件。fbcarpbf4#
打印数组有以下几种方法
fivyi3re5#
如果使用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}
kyvafyod6#
无论您使用哪个jdk版本,它都应该始终有效:
如果
Array
包含对象。如果Array
如果包含基元类型,则可以使用 Package 类而不是将基元直接存储为。。例子:
替换为:
更新:
对!值得一提的是,将数组转换为对象数组或使用对象的数组代价高昂,可能会减慢执行速度。这是java的一种特性,称为自动装箱。
所以只用于印刷目的,不应使用。我们可以制作一个函数,它以数组作为参数,并将所需的格式打印为
gv8xihay7#
Arrays.deepToString(arr)
只在一行打印。为了把一张表打印成二维表,我必须这样做:
好像
Arrays.deepToString(arr)
方法应该采用分隔符字符串,但不幸的是它没有。r3i60tvu8#
要添加到所有答案中,还可以选择将对象打印为json字符串。
使用Jackson:
使用gson:
ecfdbz9o9#
在我看来,使用正则for循环是打印数组最简单的方法。这里有一个基于intarray的示例代码
它的输出是你的1,2,3,4,5
3yhwsihp10#
因为Java5可以使用
Arrays.toString(arr)
或者Arrays.deepToString(arr)
对于数组中的数组。请注意Object[]
版本调用.toString()
在数组中的每个对象上。输出甚至按照您要求的方式进行修饰。示例:
简单数组:
输出:
嵌套数组:
输出:
双数组:
输出:
int数组:
输出:
1aaf6o9v11#
uz75evzq12#
在java中打印数组的不同方法:
简单的方法
输出:[一,二,三,四]
使用
toString()
```String[] array = new String[] { "One", "Two", "Three", "Four" };
System.out.println(Arrays.toString(array));
String[] arr1 = new String[] { "Fifth", "Sixth" };
String[] arr2 = new String[] { "Seventh", "Eight" };
String[][] arrayOfArray = new String[][] { arr1, arr2 };
System.out.println(arrayOfArray);
System.out.println(Arrays.toString(arrayOfArray));
System.out.println(Arrays.deepToString(arrayOfArray));
svmlkihl13#
从Java8开始,还可以利用
join()
string类提供的用于打印数组元素的方法,不带括号,并由所选分隔符分隔(以下示例中的空格字符):输出将是“嘿,朋友!”。
chhqkbe114#
可以选择使用org.apache.commons.lang3.stringutils.join(*)方法
例如:
我使用了以下依赖项
kd3sttzy15#
java 8之前
我们本可以用
Arrays.toString(array)
打印一维数组Arrays.deepToString(array)
对于多维数组。java 8
现在我们可以选择
Stream
以及lambda
打印数组。打印一维数组:
输出为:
[1, 2, 3, 4, 5]
[约翰,玛丽,鲍勃]
1
2
三
4
5
厕所
玛丽
鲍勃
打印多维数组只是为了万一我们想打印多维数组我们可以使用
Arrays.deepToString(array)
作为:现在要注意的是
Arrays.stream(T[])
,如果int[]
返回我们Stream<int[]>
然后是方法flatMapToInt()
将流的每个元素与通过将提供的Map函数应用于每个元素而生成的Map流的内容进行Map。输出为:
[[11, 12], [21, 22], [31, 32, 33]]
【约翰,好极了】【玛丽,李】【鲍勃,Json】】
11
12
21
22
31
32
33
厕所
好极了
玛丽
李
鲍勃
Json