Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

在Java中,数组不重写toString(),因此如果您尝试直接打印一个数组,则会得到className+'@'+数组^{}的十六进制,如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]

共 (6) 个答案

  1. # 1 楼答案

    始终首先检查标准库

    import java.util.Arrays;
    

    然后尝试:

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

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

    System.out.println(Arrays.deepToString(array));
    
  2. # 2 楼答案

    由于Java5,您可以对数组中的数组使用^{}^{}。注意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数组:

      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(Arrays.toString(intArray));
      

      输出:

      [7, 9, 5, 1, 3 ]
      
  3. # 3 楼答案

    Java8之前的版本

    我们可以使用Arrays.toString(array)打印一维数组,而Arrays.deepToString(array)打印多维数组

    爪哇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]
    [John, Mary, Bob]
    1
    2
    3
    4
    5
    John
    Mary
    Bob

    打印多维数组 为了防止我们想要打印多维数组,我们可以使用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()将流的每个元素与通过将提供的映射函数应用于每个元素而生成的映射流的内容进行映射

    输出为:

    [[11, 12], [21, 22], [31, 32, 33]]
    [[John, Bravo], [Mary, Lee], [Bob, Johnson]]
    11
    12
    21
    22
    31
    32
    33
    John
    Bravo
    Mary
    Lee
    Bob
    Johnson

  4. # 4 楼答案

    然而,知道这一点很好,至于“总是先检查标准库”,我永远不会偶然发现Arrays.toString( myarray )的诀窍

    --因为我一直在关注myarray的类型,以了解如何做到这一点。我不想重复这件事:我想要一个简单的调用,使它与我在Eclipse调试器和myarray中看到的类似。toString()只是没有这么做

    import java.util.Arrays;
    .
    .
    .
    System.out.println( Arrays.toString( myarray ) );
    
  5. # 5 楼答案

    从Java 8开始,还可以利用String class提供的join()方法打印出数组元素,不带括号,并由所选分隔符分隔(这是下面所示示例的空格字符):

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

    输出将是“嗨,朋友!”

  6. # 6 楼答案

    在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
    */