在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]
// array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(intArray));
output: [1, 2, 3, 4, 5]
// array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};
System.out.println(Arrays.toString(strArray));
output: [John, Mary, Bob]
从Java5开始,您可以对数组中的数组使用Arrays.toString(arr)或Arrays.deepToString(arr)。注意,Object[]版本对数组中的每个对象调用.toString()。输出甚至按照您要求的方式进行装饰。
示例:
简单阵列:String[]数组=新String[]{“John”,“Mary”,“Bob”};System.out.println(数组.toString(数组));输出:[约翰、玛丽、鲍勃]嵌套数组:String[][]deepArray=新String[][]{{“John”,“Mary”},{“Alice”,“Bob”}};//产生不希望的输出:System.out.println(Arrays.toString(deepArray));//给出所需输出:System.out.println(Array.deepToString(deepArray));输出:[[Ljava.lang.String;@106d69c,[Ljava.lang.String;@52e922][[约翰,玛丽],[爱丽丝,鲍勃]]双阵列:double[]doubleArray={7.0,9.0,5.0,1.0,3.0};System.out.println(Arrays.toString(doubleArray));输出:[7.0, 9.0, 5.0, 1.0, 3.0 ]int数组:int[]intArray={7,9,5,1,3};System.out.println(数组.toString(intArray));输出:[7, 9, 5, 1, 3 ]
Java 8之前
我们可以使用Arrays.toString(array)来打印一维数组,而使用Arrays.depToString(array)来打印多维数组。
Java 8
现在我们有了Stream和lambda选项来打印数组。
打印一维阵列:
public static void main(String[] args) {
int[] intArray = new int[] {1, 2, 3, 4, 5};
String[] strArray = new String[] {"John", "Mary", "Bob"};
//Prior to Java 8
System.out.println(Arrays.toString(intArray));
System.out.println(Arrays.toString(strArray));
// In Java 8 we have lambda expressions
Arrays.stream(intArray).forEach(System.out::println);
Arrays.stream(strArray).forEach(System.out::println);
}
输出为:
[1, 2, 3, 4, 5][约翰、玛丽、鲍勃]1.2.3.4.5.约翰玛丽上下快速移动
打印多维阵列为了防止我们想要打印多维数组,我们可以使用array.deepToString(array)作为:
public static void main(String[] args) {
int[][] int2DArray = new int[][] { {11, 12}, { 21, 22}, {31, 32, 33} };
String[][] str2DArray = new String[][]{ {"John", "Bravo"} , {"Mary", "Lee"}, {"Bob", "Johnson"} };
//Prior to Java 8
System.out.println(Arrays.deepToString(int2DArray));
System.out.println(Arrays.deepToString(str2DArray));
// In Java 8 we have lambda expressions
Arrays.stream(int2DArray).flatMapToInt(x -> Arrays.stream(x)).forEach(System.out::println);
Arrays.stream(str2DArray).flatMap(x -> Arrays.stream(x)).forEach(System.out::println);
}
现在需要注意的是,方法Arrays.stream(T[]),在int[]的情况下,它返回我们stream<int[]>,然后方法flatMapToInt()将流的每个元素与通过将提供的映射函数应用于每个元素而生成的映射流的内容进行映射。
输出为:
[[11, 12], [21, 22], [31, 32, 33]][[约翰,布拉沃],[玛丽,李],[鲍勃,约翰逊]]11122122313233约翰布拉沃河玛丽李上下快速移动约翰逊
在java8中,这很简单。有两个关键字
stream:数组.stream(intArray).forEach方法引用::printlnint[]intArray=新int[]{1,2,3,4,5};Arrays.stream(intArray).forEach(System.out::println);
如果要在同一行中打印数组中的所有元素,那么只需使用print而不是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));