在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条答案
按热度按时间jfewjypa16#
因为Java5可以使用
Arrays.toString(arr)
或Arrays.deepToString(arr)
对于数组中的数组。请注意Object[]
版本调用.toString()
在数组中的每个对象上。输出甚至按照您要求的方式进行装饰。示例:
简单数组:
输出:
嵌套数组:
输出:
双阵列:
输出:
整数数组:
输出:
0x6upsns17#
在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));
e4yzc0pl18#
我最近在vanilla#java上看到了这篇文章。写起来不太方便
Arrays.toString(arr);
,然后导入java.util.Arrays;
总是请注意,这并不是一个永久性的修复方法。这只是一个可以简化调试的技巧。
直接打印数组会给出内部表示和哈希代码。现在,所有的班级都有
Object
作为父类型。那么,为什么不破解这个程序呢Object.toString()
? 未经修改,对象类如下所示:如果更改为:
只需将以下内容添加到命令行,即可将此修改的类添加到类路径:
-Xbootclasspath/p:target/classes
.现在,随着
deepToString(..)
自Java5以来toString(..)
可以很容易地更改为deepToString(..)
添加对包含其他阵列的阵列的支持。我发现这是一个非常有用的hack,如果java能够简单地添加它,那就太好了。我理解使用非常大的数组的潜在问题,因为字符串表示可能有问题。也许会传一些像
System.out
或者PrintWriter
对于这种可能性。3mpgtkmj19#
无论您使用哪个jdk版本,它都应始终有效:
如果
Array
包含对象。如果Array
包含基元类型,您可以使用 Package 器类而不是将基元直接存储为。。例子:
替换为:
更新:
对值得一提的是,将数组转换为对象数组或使用对象数组的成本很高,可能会降低执行速度。这是java的特性,称为自动装箱。
因此,仅用于打印目的,不应使用。我们可以制作一个函数,该函数以数组为参数,并将所需格式打印为
e0bqpujr20#
在我看来,使用正则for循环是打印数组最简单的方法。这里有一个基于intarray的示例代码
它将输出为您的1、2、3、4、5
dw1jzc5e21#
在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));
jum4pzuy22#
6vl6ewon23#
Arrays.deepToString(arr)
只在一行上打印。要将表格打印为二维表格,我必须执行以下操作:
看起来像是
Arrays.deepToString(arr)
方法应该使用分隔符字符串,但不幸的是它没有。1aaf6o9v24#
数组.tostring
作为一个直接的回答,包括@esko在内的几个公司提供的解决方案使用
Arrays.toString
及Arrays.deepToString
方法,就是最好的。Java8-stream.collect(joining()),stream.foreach
下面我试着列出一些建议的其他方法,试图做一些改进,最值得注意的是使用
Stream.collect
运算符,使用joining
Collector
,以模仿String.join
他正在做什么。6ljaweal25#
如果您使用的是java 1.4,则可以执行以下操作:
(当然,这也适用于1.5+版本。)
bhmjp9jg26#
Java8之前的版本
我们本可以用
Arrays.toString(array)
打印一维数组和Arrays.deepToString(array)
对于多维数组。java 8
现在我们可以选择
Stream
及lambda
打印数组。打印一维数组:
输出为:
[1, 2, 3, 4, 5]
[约翰、玛丽、鲍勃]
1.
2.
3.
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
to94eoyn27#
从Java8开始,还可以利用
join()
string类提供的用于打印数组元素的方法,该方法不带括号,并由所选分隔符(以下示例中的空格字符)分隔:输出将是“嗨,朋友!”。
ws51t4hk28#
在jdk1.8中,可以使用聚合操作和lambda表达式:
uurv41yg29#
然而,知道这一点很好,至于“总是先检查标准库”,我从来没有偶然发现
Arrays.toString( myarray )
--因为我专注于myarray的类型,想看看如何做到这一点。我不想重复这件事:我想要一个简单的调用,使它与我在eclipse调试器和myarray中看到的类似。tostring()只是没有这样做。bvuwiixz30#
始终首先检查标准库。
然后尝试:
或者,如果您的数组包含其他数组作为元素: