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/

50voto

laylaylom Punkte 1648

Ab Java 8 kann man auch die Vorteile der join() Methode, die von der String-Klasse um Array-Elemente ohne die Klammern und getrennt durch ein beliebiges Trennzeichen (im folgenden Beispiel das Leerzeichen) auszugeben:

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

Die Ausgabe lautet "Hallo, Amigo!".

45voto

akhil_mittal Punkte 20953

Vor Java 8

Wir hätten verwenden können Arrays.toString(array) um ein eindimensionales Array zu drucken und Arrays.deepToString(array) für mehrdimensionale Arrays.

Java 8

Jetzt haben wir die Möglichkeit Stream y lambda um das Array zu drucken.

Drucken Eindimensionales Array:

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

Die Ausgabe ist:

[1, 2, 3, 4, 5]
(John, Mary, Bob)
1
2
3
4
5
John
Maria
Bob

Mehrdimensionales Array drucken Für den Fall, dass wir ein mehrdimensionales Array drucken wollen, können wir Arrays.deepToString(array) als:

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

Nun ist zu beachten, dass die Methode Arrays.stream(T[]) die im Falle von int[] gibt uns zurück Stream<int[]> und dann Methode flatMapToInt() bildet jedes Element von stream mit dem Inhalt eines gemappten Streams ab, der durch Anwendung der angegebenen Mapping-Funktion auf jedes Element erzeugt wird.

Die Ausgabe ist:

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

42voto

Ross Punkte 9248

Wenn Sie Java 1.4 verwenden, können Sie dies stattdessen tun:

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

(Das funktioniert natürlich auch in 1.5+.)

41 Stimmen

Leider funktioniert dies nur mit Arrays von Objekten, nicht mit Arrays von Primitiven.

29voto

Rhyous Punkte 6116

Arrays.deepToString(arr) druckt nur in einer Zeile.

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

Um eine Tabelle tatsächlich als zweidimensionale Tabelle drucken zu können, musste ich Folgendes tun:

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

Es scheint, dass die Arrays.deepToString(arr) Methode sollte eine Trennzeichenfolge akzeptieren, aber leider tut sie das nicht.

3 Stimmen

Verwenden Sie vielleicht System.getProperty("line.separator"); anstelle von \r\n Es ist also auch für Nicht-Windows geeignet.

20voto

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

8 Stimmen

Auf diese Weise entsteht ein leerer Raum ;)

1 Stimmen

@ matthiad .. diese Zeile verhindert, dass am Ende ein Leerzeichen steht System.out.println(n+ (someArray.length == n) ? "" : " ");

1 Stimmen

@MuhammadSuleman Das funktioniert nicht, weil dies eine for-each-Schleife ist. n ist der tatsächliche Wert aus dem Array, nicht der Index. Bei einer regulären for-Schleife würde es auch heißen (someArray.length - 1) == i weil er bricht, wenn i ist gleich der Länge des Arrays.

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