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

g2ieeal7  于 2021-07-08  发布在  Java
关注(0)|答案(30)|浏览(369)

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

njthzxwz1#

总是先检查标准库。

import java.util.Arrays;

然后尝试:

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

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

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

ia2d9nvy2#

在java 8中:

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

tyu7yeag3#

我最近在vanilla#java上看到了这个帖子。写起来不太方便 Arrays.toString(arr); ,然后导入 java.util.Arrays; 总是。
请注意,这不是一个永久性的解决办法。只是一个可以使调试更简单的黑客。
直接打印数组将给出内部表示和哈希代码。现在,所有的班级都有 Object 作为父类型。那么,为什么不破解 Object.toString() ? 未经修改,对象类如下所示:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

如果更改为:

public String toString() {
    if (this instanceof boolean[])
        return Arrays.toString((boolean[]) this);
    if (this instanceof byte[])
        return Arrays.toString((byte[]) this);
    if (this instanceof short[])
        return Arrays.toString((short[]) this);
    if (this instanceof char[])
        return Arrays.toString((char[]) this);
    if (this instanceof int[])
        return Arrays.toString((int[]) this);
    if (this instanceof long[])
        return Arrays.toString((long[]) this);
    if (this instanceof float[])
        return Arrays.toString((float[]) this);
    if (this instanceof double[])
        return Arrays.toString((double[]) this);
    if (this instanceof Object[])
        return Arrays.deepToString((Object[]) this);
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

只需将以下内容添加到命令行,即可将此moded类添加到类路径中: -Xbootclasspath/p:target/classes .
现在,随着 deepToString(..) 自Java5以来 toString(..) 可以很容易地更改为 deepToString(..) 添加对包含其他数组的数组的支持。
我发现这是一个非常有用的黑客,如果java能简单地添加这个,那就太好了。我理解使用非常大的数组的潜在问题,因为字符串表示可能有问题。也许会传一些像 System.out 或者 PrintWriter 对于这种不测事件。

fbcarpbf

fbcarpbf4#

打印数组有以下几种方法

// 1) toString()  
    int[] arrayInt = new int[] {10, 20, 30, 40, 50};  
    System.out.println(Arrays.toString(arrayInt));

// 2 for loop()
    for (int number : arrayInt) {
        System.out.println(number);
    }

// 3 for each()
    for(int x: arrayInt){
         System.out.println(x);
     }
fivyi3re

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}

kyvafyod

kyvafyod6#

无论您使用哪个jdk版本,它都应该始终有效:

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

如果 Array 包含对象。如果 Array 如果包含基元类型,则可以使用 Package 类而不是将基元直接存储为。。
例子:

int[] a = new int[]{1,2,3,4,5};

替换为:

Integer[] a = new Integer[]{1,2,3,4,5};

更新:
对!值得一提的是,将数组转换为对象数组或使用对象的数组代价高昂,可能会减慢执行速度。这是java的一种特性,称为自动装箱。
所以只用于印刷目的,不应使用。我们可以制作一个函数,它以数组作为参数,并将所需的格式打印为

public void printArray(int [] a){
        //write printing code
}
gv8xihay

gv8xihay7#

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

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

为了把一张表打印成二维表,我必须这样做:

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

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

r3i60tvu

r3i60tvu8#

要添加到所有答案中,还可以选择将对象打印为json字符串。
使用Jackson:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
System.out.println(ow.writeValueAsString(anyArray));

使用gson:

Gson gson = new Gson();
System.out.println(gson.toJson(anyArray));
ecfdbz9o

ecfdbz9o9#

在我看来,使用正则for循环是打印数组最简单的方法。这里有一个基于intarray的示例代码

for (int i = 0; i < intArray.length; i++) {
   System.out.print(intArray[i] + ", ");
}

它的输出是你的1,2,3,4,5

3yhwsihp

3yhwsihp10#

因为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数组:

int[] intArray = { 7, 9, 5, 1, 3 };
System.out.println(Arrays.toString(intArray));

输出:

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

1aaf6o9v11#

public class printer {

    public static void main(String[] args) {
        String a[] = new String[4];
        Scanner sc = new Scanner(System.in);
        System.out.println("enter the data");
        for (int i = 0; i < 4; i++) {
            a[i] = sc.nextLine();
        }
        System.out.println("the entered data is");
        for (String i : a) {
            System.out.println(i);
        }
      }
    }
uz75evzq

uz75evzq12#

在java中打印数组的不同方法:
简单的方法

List<String> list = new ArrayList<String>();
list.add("One");
list.add("Two");
list.add("Three");
list.add("Four");
// Print the list in console
System.out.println(list);

输出:[一,二,三,四]
使用 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));

输出:[[ljava.lang.string@1ad086a[[ljava.lang.string@10385c1,[ljava.lang.string@42719c][[第五,第六],[第七,第八]]
资源:访问阵列
svmlkihl

svmlkihl13#

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

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

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

chhqkbe1

chhqkbe114#

可以选择使用org.apache.commons.lang3.stringutils.join(*)方法
例如:

String[] strArray = new String[] { "John", "Mary", "Bob" };
String arrayAsCSV = StringUtils.join(strArray, " , ");
System.out.printf("[%s]", arrayAsCSV);
//output: [John , Mary , Bob]

我使用了以下依赖项

<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
kd3sttzy

kd3sttzy15#

java 8之前

我们本可以用 Arrays.toString(array) 打印一维数组 Arrays.deepToString(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

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

相关问题