打印java数组的最简单方法是什么?

cngwdvgl  于 2021-08-25  发布在  Java
关注(0)|答案(30)|浏览(349)

在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]
q5lcpyga

q5lcpyga1#

如果使用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}

wh6knrhe

wh6knrhe2#

在java 8中:

Arrays.stream(myArray).forEach(System.out::println);
1qczuiv0

1qczuiv03#

这里有一个可能的打印功能:

public static void printArray (int [] array){
        System.out.print("{ ");
        for (int i = 0; i < array.length; i++){
            System.out.print("[" + array[i] + "] ");
        }
        System.out.print("}");
    }

例如,如果main是这样的

public static void main (String [] args){
    int [] array = {1, 2, 3, 4};
    printArray(array);
}

输出将为{[1][2][3][4]}

vlju58qv

vlju58qv4#

在jdk1.8中,可以使用聚合操作和lambda表达式:

String[] strArray = new String[] {"John", "Mary", "Bob"};

// #1
Arrays.asList(strArray).stream().forEach(s -> System.out.println(s));

// #2
Stream.of(strArray).forEach(System.out::println);

 // #3
 Arrays.stream(strArray).forEach(System.out::println);

/* output:
John
Mary
Bob

* /

另外,从java 8开始,还可以利用string类提供的join()方法打印出数组元素,不带括号,并由所选的分隔符(以下示例中的空格字符)分隔

string[] greeting = {"Hey", "there", "amigo!"};
String delimiter = " ";
String.join(delimiter, greeting)

`输出将是“嗨,朋友!”

z8dt9xmd

z8dt9xmd5#

如果您正在运行jdk 8。

public static void print(int[] array) {
    StringJoiner joiner = new StringJoiner(",", "[", "]");
    Arrays.stream(array).forEach(element -> joiner.add(element + ""));
    System.out.println(joiner.toString());
}

int[] array = new int[]{7, 3, 5, 1, 3};
print(array);

输出:

[7,3,5,1,3]
jfewjypa

jfewjypa6#

因为Java5可以使用 Arrays.toString(arr)Arrays.deepToString(arr) 对于数组中的数组。请注意 Object[] 版本调用 .toString() 在数组中的每个对象上。输出甚至按照您要求的方式进行装饰。
示例:

简单数组:

String[] array = new String[] {"John", "Mary", "Bob"};
System.out.println(Arrays.toString(array));

输出:

[John, Mary, Bob]

嵌套数组:

String[][] deepArray = new String[][] {{"John", "Mary"}, {"Alice", "Bob"}};
System.out.println(Arrays.toString(deepArray));
//output: [[Ljava.lang.String;@106d69c, [Ljava.lang.String;@52e922]
System.out.println(Arrays.deepToString(deepArray));

输出:

[[John, Mary], [Alice, Bob]]

双阵列:

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[] intArray = { 7, 9, 5, 1, 3 };
System.out.println(Arrays.toString(intArray));

输出:

[7, 9, 5, 1, 3 ]
bvuwiixz

bvuwiixz7#

始终首先检查标准库。

import java.util.Arrays;

然后尝试:

System.out.println(Arrays.toString(array));

或者,如果您的数组包含其他数组作为元素:

System.out.println(Arrays.deepToString(array));
uurv41yg

uurv41yg8#

然而,知道这一点很好,至于“总是先检查标准库”,我从来没有偶然发现 Arrays.toString( myarray ) --因为我专注于myarray的类型,想看看如何做到这一点。我不想重复这件事:我想要一个简单的调用,使它与我在eclipse调试器和myarray中看到的类似。tostring()只是没有这样做。

import java.util.Arrays;
.
.
.
System.out.println( Arrays.toString( myarray ) );
ws51t4hk

ws51t4hk9#

在jdk1.8中,可以使用聚合操作和lambda表达式:

String[] strArray = new String[] {"John", "Mary", "Bob"};

// #1
Arrays.asList(strArray).stream().forEach(s -> System.out.println(s));

// #2
Stream.of(strArray).forEach(System.out::println);

// #3
Arrays.stream(strArray).forEach(System.out::println);

/* output:
John
Mary
Bob

* /
to94eoyn

to94eoyn10#

从Java8开始,还可以利用 join() string类提供的用于打印数组元素的方法,该方法不带括号,并由所选分隔符(以下示例中的空格字符)分隔:

String[] greeting = {"Hey", "there", "amigo!"};
String delimiter = " ";
String.join(delimiter, greeting)

输出将是“嗨,朋友!”。

bhmjp9jg

bhmjp9jg11#

Java8之前的版本

我们本可以用 Arrays.toString(array) 打印一维数组和 Arrays.deepToString(array) 对于多维数组。

java 8

现在我们可以选择 Streamlambda 打印数组。
打印一维数组:

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.
厕所
玛丽
上下快速移动
打印多维数组以防我们想要打印我们可以使用的多维数组 Arrays.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() 将流的每个元素与通过将提供的Map函数应用于每个元素而生成的Map流的内容进行Map。
输出为:
[[11, 12], [21, 22], [31, 32, 33]]
[约翰,好极了],[玛丽,李],[鲍勃,Json]]
11
12
21
22
31
32
33
厕所
好极了
玛丽

上下快速移动
Json

6ljaweal

6ljaweal12#

如果您使用的是java 1.4,则可以执行以下操作:

System.out.println(Arrays.asList(array));

(当然,这也适用于1.5+版本。)

1aaf6o9v

1aaf6o9v13#

数组.tostring

作为一个直接的回答,包括@esko在内的几个公司提供的解决方案使用 Arrays.toStringArrays.deepToString 方法,就是最好的。

Java8-stream.collect(joining()),stream.foreach

下面我试着列出一些建议的其他方法,试图做一些改进,最值得注意的是使用 Stream.collect 运算符,使用
joining Collector ,以模仿 String.join 他正在做什么。

int[] ints = new int[] {1, 2, 3, 4, 5};
System.out.println(IntStream.of(ints).mapToObj(Integer::toString).collect(Collectors.joining(", ")));
System.out.println(IntStream.of(ints).boxed().map(Object::toString).collect(Collectors.joining(", ")));
System.out.println(Arrays.toString(ints));

String[] strs = new String[] {"John", "Mary", "Bob"};
System.out.println(Stream.of(strs).collect(Collectors.joining(", ")));
System.out.println(String.join(", ", strs));
System.out.println(Arrays.toString(strs));

DayOfWeek [] days = { FRIDAY, MONDAY, TUESDAY };
System.out.println(Stream.of(days).map(Object::toString).collect(Collectors.joining(", ")));
System.out.println(Arrays.toString(days));

// These options are not the same as each item is printed on a new line:
IntStream.of(ints).forEach(System.out::println);
Stream.of(strs).forEach(System.out::println);
Stream.of(days).forEach(System.out::println);
6vl6ewon

6vl6ewon14#

Arrays.deepToString(arr) 只在一行上打印。

int[][] table = new int[2][2];

要将表格打印为二维表格,我必须执行以下操作:

System.out.println(Arrays.deepToString(table).replaceAll("],", "]," + System.getProperty("line.separator")));

看起来像是 Arrays.deepToString(arr) 方法应该使用分隔符字符串,但不幸的是它没有。

jum4pzuy

jum4pzuy15#

for(int n: someArray) {
    System.out.println(n+" ");
}

相关问题