2297 Stimmen

Wie kann man ein Java-Array am einfachsten ausdrucken?

In Java überschreiben Arrays nicht die toString() Wenn Sie also versuchen, einen direkt zu drucken, erhalten Sie die Meldung className + '@' + das Hexadezimalzeichen der [hashCode](https://en.wikipedia.org/wiki/Java_hashCode()) des Arrays, wie definiert durch Object.toString() :

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray);     // prints something like '[I@3343c8b3'

Aber normalerweise wollen wir eher etwas wie [1, 2, 3, 4, 5] . Wie lässt sich das am einfachsten bewerkstelligen? Hier sind einige Beispiele für Eingaben und Ausgaben:

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

9 Stimmen

Was soll die Darstellung für andere Objekte als Strings sein? Das Ergebnis des Aufrufs von toString? In Anführungszeichen oder nicht?

3 Stimmen

Ja, die Objekte werden durch ihre toString()-Methode und ohne Anführungszeichen dargestellt (die Beispielausgabe wurde gerade bearbeitet).

2 Stimmen

In der Praxis, eng verbunden mit stackoverflow.com/questions/29140402/

3065voto

Esko Punkte 28242

Seit Java 5 können Sie mit Arrays.toString(arr) o Arrays.deepToString(arr) für Arrays innerhalb von Arrays. Beachten Sie, dass die Object[] Versionsaufrufe .toString() für jedes Objekt im Array. Die Ausgabe ist sogar genau so gestaltet, wie Sie es wünschen.

Beispiele:

  • Einfaches Array:

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

    Ausgabe:

    [John, Mary, Bob]
  • Verschachteltes Array:

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

    Ausgabe:

    [[John, Mary], [Alice, Bob]]
  • double Array:

    double[] doubleArray = { 7.0, 9.0, 5.0, 1.0, 3.0 };
    System.out.println(Arrays.toString(doubleArray));

    Ausgabe:

    [7.0, 9.0, 5.0, 1.0, 3.0 ]
  • int Array:

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

    Ausgabe:

    [7, 9, 5, 1, 3 ]

4 Stimmen

Was ist, wenn wir ein Array von Strings haben und eine einfache Ausgabe wünschen, z. B.: String[] array = {"John", "Mahta", "Sara"} und wir wollen diese Ausgabe ohne Klammern und Kommas: John Mahta Sara ?

3 Stimmen

@Hengameh: Es gibt mehrere andere Möglichkeiten, dies zu tun, aber meine Lieblingsmethode ist diese: javahotchocolate.com/notes/java.html#arrays-tostring .

5 Stimmen

ZU IHRER INFORMATION, Arrays.deepToString() akzeptiert nur eine Object [] (oder eine Reihe von Klassen, die die Object , wie zum Beispiel Integer und funktioniert daher nicht bei einem primitiven Array des Typs int [] . Aber Arrays.toString(<int array>) funktioniert gut für primitive Arrays.

410voto

Limbic System Punkte 6550

Prüfen Sie immer zuerst die Standardbibliotheken.

import java.util.Arrays;

Dann versuchen Sie es:

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

oder wenn Ihr Array andere Arrays als Elemente enthält:

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

22 Stimmen

@Hengameh Heutzutage mit Java 8: String.join(" ", Arrays.asList(array)) . doc

111voto

Russ Bateman Punkte 17671

Das ist gut zu wissen, aber wie bei "immer zuerst die Standardbibliotheken prüfen" wäre ich nie auf den Trick gestoßen, die Arrays.toString( myarray )

-, da ich mich auf den Typ von myarray konzentrierte, um zu sehen, wie man das macht. Ich wollte nicht durch das Ding iterieren müssen: Ich wollte einen einfachen Aufruf, um es herauskommen zu lassen, was ich im Eclipse-Debugger sehe und myarray.toString() tat es einfach nicht.

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

106voto

Eric Baker Punkte 1057

In JDK1.8 können Sie Aggregatoperationen und einen Lambda-Ausdruck verwenden:

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

53voto

YoYo Punkte 8537

Arrays.toString

Als direkte Antwort, die von mehreren, darunter @Esko, angebotene Lösung unter Verwendung der Arrays.toString y Arrays.deepToString Methoden, ist einfach die beste.

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

Im Folgenden versuche ich, einige der anderen vorgeschlagenen Methoden aufzulisten und ein wenig zu verbessern, wobei die bemerkenswerteste Ergänzung die Verwendung der Stream.collect Operator, unter Verwendung eines joining Collector zu imitieren, was die String.join tut.

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 Stimmen

Wenn Sie IntStream.of(ints).forEach(System.out::print); verwenden, glaube ich nicht, dass es in einer neuen Zeile gedruckt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X