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

What's the simplest way to print a Java array?

提问人:Alex Spurling 提问时间:1/4/2009 最后编辑:MahozadAlex Spurling 更新时间:9/24/2023 访问量:3141867

问:

在 Java 中,数组不会覆盖,因此如果您尝试直接打印一个数组,则会得到数组的 hashCode 的 + '@' + 十六进制,定义如下:toString()classNameObject.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]
Java 数组 打印 tostring

评论

9赞 Jon Skeet 1/4/2009
您希望字符串以外的对象的表示形式是什么?调用 toString 的结果是什么?是否用引号?
3赞 Alex Spurling 1/4/2009
是的,对象将由它们的 toString() 方法表示,并且不带引号(刚刚编辑了示例输出)。
2赞 Raedwald 1/25/2016
在实践中,与 stackoverflow.com/questions/29140402/ 密切相关...
2赞 4castle 11/11/2016
这种奇怪的输出不一定是内存位置。它是十六进制的。参见 Object#toString()。hashCode()
1赞 akhil_mittal 11/16/2016
要在 java8 中打印一维或多维数组,请检查 stackoverflow.com/questions/409784/...

答:

3187赞 17 revs, 16 users 19%randers #1

从 Java 5 开始,您可以将 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"}};
    // Gives undesired output:
    System.out.println(Arrays.toString(deepArray));
    // Gives the desired output:
    System.out.println(Arrays.deepToString(deepArray));
    

    输出:

    [[Ljava.lang.String;@106d69c, [Ljava.lang.String;@52e922]
    [[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 ]
    

评论

4赞 Hengameh 8/29/2015
如果我们有一个字符串数组,并且想要简单的输出怎么办?like: ,我们希望这个输出没有括号和逗号:?String[] array = {"John", "Mahta", "Sara"}John Mahta Sara
3赞 Russ Bateman 8/29/2015
@Hengameh:还有其他几种方法可以做到这一点,但我最喜欢的是这个:javahotchocolate.com/notes/java.html#arrays-tostring
5赞 Marcus 12/12/2015
仅供参考,只接受一个(或扩展的类数组,例如 ,因此它不适用于 类型的原始数组。但适用于原始数组。Arrays.deepToString()Object []ObjectIntegerint []Arrays.toString(<int array>)
7赞 SE is dead 3/13/2017
@Hengameh 有一种专门用于此的方法。 将打印 .System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))John Mahta Sara
11赞 M.Hossein Rahimi 10/22/2019
不要忘记 “import java.util.Arrays;”
431赞 Limbic System 1/4/2009 #2

始终首先检查标准库。

import java.util.Arrays;

然后尝试:

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

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

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

评论

25赞 Justin 3/5/2016
@Hengameh 现在的 Java 8: .医生String.join(" ", Arrays.asList(array))
43赞 Ross 1/4/2009 #3

如果您使用的是 Java 1.4,则可以改为:

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

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

评论

41赞 Alex Spurling 1/4/2009
不幸的是,这只适用于对象数组,而不适用于基元数组。
115赞 Russ Bateman 5/13/2010 #4

然而,很高兴知道这一点,至于“总是先检查标准库”,我从来没有偶然发现过Arrays.toString( myarray )

--因为我专注于 myarray 的类型,看看如何做到这一点。我不想遍历这个东西:我想要一个简单的调用来使它类似于我在 Eclipse 调试器中看到的,而 myarray.toString() 只是没有这样做。

import java.util.Arrays;
.
.
.
System.out.println( Arrays.toString( myarray ) );
20赞 somedude 1/24/2011 #5
for(int n: someArray) {
    System.out.println(n+" ");
}

评论

8赞 Matthias 9/21/2014
这样,您最终会得到一个空白空间;)
1赞 Muhammad Suleman 6/1/2015
@马蒂亚德 ..这一行将避免以空格结尾 System.out.println(n+ (someArray.length == n) ?"" : " ");
1赞 Radiodef 8/7/2018
@MuhammadSuleman 这是行不通的,因为这是一个 for-each 循环。 是数组中的实际值,而不是索引。对于常规的 for 循环,它也是 ,因为它在等于数组长度时中断。n(someArray.length - 1) == ii
30赞 Rhyous 10/6/2013 #6

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

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

为了真正将表格打印为二维表格,我必须这样做:

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

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

评论

3赞 Scooter 12/22/2013
也许使用 System.getProperty(“line.separator”);而不是 \r\n,所以它也适用于非 Windows。
12赞 Andrew_Dublin 12/28/2013 #7

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

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

它提供输出作为您的输出 1, 2, 3, 4, 5

评论

4赞 icza 3/10/2014
它打印“1, 2, 3, 4, 5, ”作为输出,它在最后一个元素之后也打印逗号。
3赞 Nepoxx 7/17/2014
您可以将循环中的代码替换为System.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
2赞 Nick Suwyn 1/12/2016
您也可以使用这两条线来组合。System.out.print(i + (i < intArray.length - 1 ? ", " : ""));
112赞 Eric Baker 2/7/2014 #8

在 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
*/
3赞 Jean Logeart 2/19/2014 #9

要添加到所有答案中,还可以选择将对象打印为 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));

评论

0赞 CryptoFool 2/10/2019
这就是我的工作。有了这个,你可以打印任意复杂的结构,只要它们可以编码成JSON。我总是确保使用“漂亮”。你的第二个例子是这样做的吗?我认为你需要挠痒痒的“漂亮”选项才能得到它。
5赞 Roam 4/29/2014 #10

如果您的数组是 char[] 类型,还有另一种方法:

char A[] = {'a', 'b', 'c'}; 

System.out.println(A); // no other arguments

指纹

abc
2赞 user3369011 9/21/2014 #11
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);
        }
      }
    }
4赞 Mohamed Idris 2/17/2015 #12

我尝试过的一个简化的快捷方式是这样的:

    int x[] = {1,2,3};
    String printableText = Arrays.toString(x).replaceAll("[\\[\\]]", "").replaceAll(", ", "\n");
    System.out.println(printableText);

它将打印

1
2
3

这种方法不需要循环,它只适用于小型阵列

46赞 akhil_mittal 6/19/2015 #13

Java 8 之前的版本

我们可以用来打印一维数组和多维数组。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]
[约翰,玛丽,鲍勃]
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()

输出为:

[[11, 12], [21, 22], [31, 32, 33]]
[[约翰·布拉沃], [玛丽·李], [鲍勃·约翰逊]] 11

12 21

22 31 32


33
约翰·布拉沃
玛丽
·李 鲍勃
·

约翰逊

4赞 Haim Raman 8/6/2015 #14

可以选择使用 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>

评论

0赞 jurez 5/11/2020
因为在两行代码中完成的琐碎事情而添加依赖项是一种尖叫的反模式。
0赞 Haim Raman 5/12/2020
commons-lang3 是一个非常 poplar 的依赖项,请注意,这个答案是大多数人没有使用 Java 8
0赞 Marc H. 11/21/2020
正如 stackoverflow.com/questions/38425623/ 中提到的,最好的解决方案...... commons-lang 当然非常受欢迎,应该使用而不是自己实现。这种实用方法必须经过测试,并且也应该可用于其他项目。只要原始数组不能简单处理,像 common-lang 这样具有重载方法的库对我来说就是解决这个问题的最好和最有效的方法。
51赞 laylaylom 12/24/2015 #15

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

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

输出将是“嘿,朋友!

55赞 YoYo 3/11/2016 #16

Arrays.toString

作为直接答案,包括 @Esko 在内的几个人使用 Arrays.toString 和 Arrays.deepToString 方法提供的解决方案是最好的。

Java 8 - Stream.collect(joining()), Stream.forEach

下面我尝试列出一些建议的其他方法,试图改进一点,最显着的补充是使用 Stream.collect 运算符,使用连接来模拟正在执行的操作。CollectorString.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);

评论

0赞 Prashant 4/28/2022
如果您使用 IntStream.of(ints).forEach(System.out::p rint);我不认为它会以新行打印。.
9赞 Debosmit Ray 3/11/2016 #17

我最近在 Vanilla #Java 上看到了这篇文章。写不是很方便,然后一直导入。Arrays.toString(arr);java.util.Arrays;

请注意,这绝不是永久修复。只是一个可以使调试更简单的技巧。

打印数组直接给出内部表示和 hashCode。现在,所有类都具有父类型。那么,为什么不破解呢?如果不进行修改,Object 类如下所示:ObjectObject.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());
}

可以通过在命令行中添加以下内容来简单地将此修改后的类添加到类路径中:.-Xbootclasspath/p:target/classes

现在,随着 Java 5 的推出,可以很容易地将 更改为添加对包含其他数组的数组的支持。deepToString(..)toString(..)deepToString(..)

我发现这是一个非常有用的技巧,如果 Java 可以简单地添加它,那就太好了。我理解具有非常大的数组的潜在问题,因为字符串表示可能会有问题。也许为这种可能性传递类似 a 或 a 的东西。System.outPrintWriter

11赞 Greesh Kumar 5/13/2016 #18

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

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

如果包含对象,它将起作用。如果包含基元类型,则可以使用包装类,而不是将基元直接存储为。ArrayArray

例:

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
} 

评论

2赞 Debosmit Ray 5/13/2016
仅仅出于打印目的将数组转换为列表似乎不是一个非常足智多谋的决定;鉴于同一个类有一个 ,这让我很难理解为什么有人会这样做。toString(..)
9赞 suatCoskun 6/26/2016 #19

在 java 8 中,这很容易。有两个关键词

  1. 流:Arrays.stream(intArray).forEach
  2. 方法参考:::println

    int[] intArray = new int[] {1, 2, 3, 4, 5};
    Arrays.stream(intArray).forEach(System.out::println);
    

如果要在同一行中打印数组中的所有元素,则只需使用 而不是 即printprintln

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));
7赞 Dylan Black 7/21/2016 #20

您可以遍历数组,在循环时打印出每个项目。例如:

String[] items = {"item 1", "item 2", "item 3"};

for(int i = 0; i < items.length; i++) {

    System.out.println(items[i]);

}

输出:

item 1
item 2
item 3
18赞 Aftab 8/7/2016 #21

在 Java 中打印数组的不同方法:

  1. 简单的方法

    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);
    

输出: [一、二、三、四]

  1. 使用 toString()

    String[] array = new String[] { "One", "Two", "Three", "Four" };
    System.out.println(Arrays.toString(array));
    

输出:[一、二、三、四]

  1. 打印数组的数组

    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][[第五,第六],[第七,第八]]

资源:访问数组

4赞 hasham.98 12/6/2016 #22

For-each 循环也可用于打印数组的元素:

int array[] = {1, 2, 3, 4, 5};
for (int i:array)
    System.out.println(i);

评论

0赞 hasham.98 12/26/2016
@firephil System.out.println(a[i]);与普通 for 循环一起使用,其中创建索引“i”并打印每个索引的值。我使用了“for each”循环。试一试,希望你能明白我的观点。
6赞 Ravi Patel 9/25/2017 #23

打印数组的方法有以下几种

 // 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);
     }
3赞 fjnk 3/16/2018 #24
// 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]
1赞 Mehdi 4/21/2018 #25

在 java 8 中:

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

评论

0赞 Mehdi 8/5/2020
那些投票删除我的答案的人.你能把你的观点暴露出来,让每个人都能学习吗?这个问题是 java 中最简单的方法,所以它是一行,java 当前版本是 >14,我的解决方案至少适用于 java 8(所以它适用)。
2赞 Peter Lawrey 6/23/2018 #26

这被标记为打印 byte[] 的重复项。注意:对于字节数组,还有其他方法可能是合适的。

如果它包含 ISO-8859-1 字符,则可以将其打印为 String。

String s = new String(bytes, StandardChars.ISO_8559);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.ISO_8559);

或者如果它包含 UTF-8 字符串

String s = new String(bytes, StandardChars.UTF_8);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.UTF_8);

或者,如果您愿意将其打印为十六进制。

String s = DatatypeConverter.printHexBinary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseHexBinary(s);

或者,如果您愿意将其打印为 base64。

String s = DatatypeConverter.printBase64Binary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseBase64Binary(s);

或者,如果要打印有符号字节值的数组

String s = Arrays.toString(bytes);
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = Byte.parseByte(split[i]);

或者,如果要打印无符号字节值数组

String s = Arrays.toString(
               IntStream.range(0, bytes.length).map(i -> bytes[i] & 0xFF).toArray());
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = (byte) Integer.parseInt(split[i]); // might need a range check.
-1赞 Gayan Sampath 7/1/2018 #27

有几种方法可以打印数组元素。首先,我将解释一下,什么是数组?..数组是一种用于存储数据的简单数据结构。当您定义一个数组时,在RAM中分配一组辅助内存块。这些内存块被占用一个单位。

好的,我将创建一个这样的数组,

class demo{
      public static void main(String a[]){

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

           System.out.print(number);
      }
}

现在看输出,

enter image description here

您可以看到打印了一个未知字符串。正如我之前提到的,打印了其 array(number array) 声明的内存地址。如果要显示数组中的元素,可以使用 “for 循环 ” ,如下所示。

class demo{
      public static void main(String a[]){

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

           int i;

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

现在看输出,

enter image description here

好的,成功打印了一维数组的元素。现在我将考虑二维数组。我将二维数组声明为“number2”,并使用“Arrays.deepToString()”关键字打印元素。在使用它之前,您必须导入“java.util.Arrays”库。

 import java.util.Arrays;

 class demo{
      public static void main(String a[]){

           int[][] number2={{1,2},{3,4},{5,6}};`

           System.out.print(Arrays.deepToString(number2));
      }
}

考虑输出,

enter image description here

同时,使用两个for循环,可以打印2D元素。谢谢!

评论

0赞 Manjitha Teshara 8/5/2018
int 数组[] = {1, 2, 3, 4, 5};for (int i:array) System.out.println(i);
0赞 Manjitha Teshara 8/5/2018
试试这个,我认为这是打印数组的最短方法
0赞 GotoFinal 1/14/2020
“打印了其 array(number array) 声明的内存地址” 这根本不是真的,它的系统哈希码是对象,这可以基于很多东西,包括内存地址,但这以后可能会改变,哈希码不会改变。目前它主要是一个随机数。gotofinal.dev/java/2017/10/08/java-default-hashcode.html
2赞 duyuanchao 12/10/2018 #28

如果您运行的是 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]

评论

0赞 John McClane 12/14/2018
这比公认的答案更好,因为它可以更好地控制分隔符、前缀和后缀。但是,我会删除 final 中的多余内容并使用它而不是添加空字符串。此解决方案也适用于非基元类型的数组,并且是一致的。toString()System.out.println()joiner.add(element.toString())
0赞 John McClane 12/14/2018
我的坏,里面只适用于非原始类型。你仍然需要使用 - like 基元类型的构造。就我个人而言,我使用 foreach 循环而不是流,但这是品味问题。element.toString()joiner.add()Integer.toString(element)for (int element : array) joiner.add(Integer.toString(element));
1赞 Pradip Karki 1/2/2019 #29

如果使用 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}
-1赞 Chen Jin 10/21/2019 #30

toString 是一种将数组转换为字符串的方法。

此外,您还可以使用:

for (int i = 0; i < myArray.length; i++){
System.out.println(myArray[i] + " ");
}

这个 for 循环将使您能够按顺序打印数组的每个值。

1赞 Anubhav Mishra 6/4/2020 #31

在 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) 

` 输出将是“嘿,朋友!

3赞 Chiara Tumminelli 12/2/2020 #32

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

  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] }

2赞 Anis KCHAOU 3/30/2021 #33

如果您使用的是 Java 11

import java.util.Arrays;
public class HelloWorld{

     public static void main(String []args){
        String[] array = { "John", "Mahta", "Sara" };
       System.out.println(Arrays.toString(array).replace(",", "").replace("[", "").replace("]", ""));
     }
}

输出:

John Mahta Sara
0赞 jkwli 6/15/2021 #34

通过使用 java.util.Arrays:

String mRole = "M_XXX_ABC";        
System.out.println(Arrays.asList(mRole.split("_")).toString());

输出:[M, XXX, ABC]

7赞 Nikhil S Marathe 3/14/2022 #35
  • 这是在JAVA中不使用任何循环即可打印数组的非常简单的方法。

    -> 对于,单个或简单数组:

     int[] array = new int[]{1, 2, 3, 4, 5, 6};
     System.out.println(Arrays.toString(array));
    

    输出:

          [1, 2, 3, 4, 5, 6]
    

    -> 因此,这个 2D 数组不能用 Arrays.toString() 打印

     int[][] array = new int[][]{{1, 2, 3, 4, 5, 6, 7}, {8, 9, 10, 11, 12,13,14}};
     System.out.println(Arrays.deepToString(array));
    

    输出:

       [[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14]]
    
0赞 Shinu Mathew 9/10/2022 #36

使用 Arrays 类。它有多种实用方法,并且被覆盖以以人类可读的方式显示数组元素。toString()Arrays.toString(arr)

0赞 Mahozad 12/2/2022 #37

对于最终来到这里的 Android 开发人员来说,这是针对 Kotlin 的:

println(myArray.joinToString())

println(myArray.joinToString(separator = "|"))