In Java werden Arrays nicht überschrieben toString()
. Wenn Sie also versuchen, eines direkt zu drucken, erhalten Sie das className
+ '@' + das Hex des hashCode
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 möchten wir eigentlich etwas Ähnliches [1, 2, 3, 4, 5]
. Was ist der einfachste Weg, das zu tun? Hier einige Beispiele für Ein- und Ausgänge:
// 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]
hashCode()
hexadezimale. SieheObject#toString()
.Antworten:
Seit Java 5 können Sie
Arrays.toString(arr)
oderArrays.deepToString(arr)
für Arrays innerhalb von Arrays verwenden. Beachten Sie, dass dieObject[]
Version.toString()
jedes Objekt im Array aufruft . Die Ausgabe ist sogar genau so dekoriert, wie Sie es wünschen.Beispiele:
Einfaches Array:
Ausgabe:
Verschachteltes Array:
Ausgabe:
double
Array:Ausgabe:
int
Array:Ausgabe:
quelle
String[] array = {"John", "Mahta", "Sara"}
, und wir wollen diese Ausgabe ohne Klammern und Kommas :John Mahta Sara
?Arrays.deepToString()
akzeptiert nur einObject []
(oder ein Array von Klassen, die sich erweiternObject
, z. B.Integer
, damit es nicht auf einem primitiven Array vom Typ funktioniertint []
. Funktioniert aberArrays.toString(<int array>)
gut für primitive Arrays.System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))
wird gedrucktJohn Mahta Sara
.String.join(" ", "John", "Mahta", "Sara")
Für die.join(...)
Methode wird das Array als vararg- Parameter verwendet.Überprüfen Sie immer zuerst die Standardbibliotheken.
Dann versuche es:
oder wenn Ihr Array andere Arrays als Elemente enthält:
quelle
String[] array = {"John", "Mahta", "Sara"}
, und wir wollen diese Ausgabe ohne Klammern und Kommas :John Mahta Sara
?String.join(" ", Arrays.asList(array))
. docDies ist jedoch gut zu wissen, da ich bei "Überprüfen Sie immer zuerst die Standardbibliotheken zuerst" nie auf den Trick von gestoßen wäre
Arrays.toString( myarray )
- seit ich mich auf die Art von Myarray konzentriert habe, um zu sehen, wie das geht. Ich wollte das Ding nicht durchlaufen müssen: Ich wollte einen einfachen Aufruf, damit es ähnlich wie im Eclipse-Debugger und myarray herauskommt. ToString () tat es einfach nicht.
quelle
String[] array = {"John", "Mahta", "Sara"}
, und wir wollen diese Ausgabe ohne Klammern und Kommas :John Mahta Sara
?In JDK1.8 können Sie Aggregatoperationen und einen Lambda-Ausdruck verwenden:
quelle
Arrays.stream(strArray).forEach(System.out::println);
System.out::println
um eine Java 8-Methodenreferenz handeln. Ihr Code erzeugt ein unnötiges Lambda.Arrays.asList
und tunArrays.stream(strArray).forEach(System.out::println)
Stream.of
tun.skip(n).limit(m)
. Die aktuelle Implementierung gibt keinen SIZED-Stream zurückArrays.stream(T[], int, int)
, was zu einer besseren Aufteilungsleistung führt, wenn Sie Operationen parallel ausführen möchten. Auch wenn Sie eine habenint[]
, können Sie versehentlich eine verwenden,Stream.of
die eineStream<int[]>
mit einem einzelnen Element zurückgibt, währendArrays.stream
Sie eineIntStream
direkt erhalten.Ab Java 8 kann man auch die
join()
von der String-Klasse bereitgestellte Methode nutzen , um Array-Elemente ohne Klammern auszudrucken und durch ein Trennzeichen der Wahl zu trennen (dies ist das Leerzeichen für das unten gezeigte Beispiel):Die Ausgabe wird "Hey there amigo!" Sein.
quelle
Wenn Sie Java 1.4 verwenden, können Sie stattdessen Folgendes tun:
(Dies funktioniert natürlich auch in 1.5+.)
quelle
Arrays.toString
Als direkte Antwort ist die Lösung, die von mehreren, einschließlich @Esko , unter Verwendung der Methoden
Arrays.toString
und bereitgestellt wirdArrays.deepToString
, einfach die beste.Java 8 - Stream.collect (join ()), Stream.forEach
Im Folgenden versuche ich, einige der anderen vorgeschlagenen Methoden aufzulisten, um sie ein wenig zu verbessern. Die bemerkenswerteste Ergänzung ist die Verwendung des
Stream.collect
Operators mit a , um nachzuahmen, was der Operator tut.joining
Collector
String.join
quelle
Vor Java 8
Wir hätten
Arrays.toString(array)
eindimensionale Arrays undArrays.deepToString(array)
mehrdimensionale Arrays drucken können .Java 8
Jetzt haben wir die Möglichkeit ,
Stream
undlambda
das Array zu drucken.Drucken eines eindimensionalen Arrays:
Die Ausgabe ist:
Drucken eines mehrdimensionalen Arrays Nur für den Fall, dass wir ein mehrdimensionales Array drucken möchten, können wir Folgendes verwenden
Arrays.deepToString(array)
:Nun ist zu beachten, dass die Methode
Arrays.stream(T[])
, dieint[]
uns zurückgibtStream<int[]>
und dann die MethodeflatMapToInt()
jedes Element des Streams mit dem Inhalt eines zugeordneten Streams abbildet, der durch Anwenden der bereitgestellten Zuordnungsfunktion auf jedes Element erzeugt wird.Die Ausgabe ist:
quelle
String[] array = {"John", "Mahta", "Sara"}
, und wir wollen diese Ausgabe ohne Klammern und Kommas :John Mahta Sara
?Arrays.deepToString(arr)
druckt nur in einer Zeile.Um eine Tabelle tatsächlich als zweidimensionale Tabelle drucken zu lassen, musste ich Folgendes tun:
Es scheint, dass die
Arrays.deepToString(arr)
Methode eine Trennzeichenfolge verwenden sollte, aber leider nicht.quelle
quelle
n
ist der tatsächliche Wert aus dem Array, nicht der Index. Für eine reguläre for-Schleife wäre dies auch der Fall(someArray.length - 1) == i
, da sie bricht, wenn siei
gleich der Array-Länge ist.Verschiedene Möglichkeiten zum Drucken von Arrays in Java:
Einfacher Weg
Verwenden von
toString()
Array von Arrays drucken
Ressource: Zugriff auf ein Array
quelle
Die Verwendung der regulären for- Schleife ist meiner Meinung nach die einfachste Art, ein Array zu drucken. Hier haben Sie einen Beispielcode, der auf Ihrem intArray basiert
Es gibt Ausgabe als Ihre 1, 2, 3, 4, 5
quelle
System.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
System.out.print(i + (i < intArray.length - 1 ? ", " : ""));
diese beiden Zeilen auch verwenden , um sie zu kombinieren.Ich bin kürzlich auf diesen Beitrag in Vanilla #Java gestoßen . Es ist nicht sehr bequem zu schreiben
Arrays.toString(arr);
und dann diejava.util.Arrays;
ganze Zeit zu importieren .Bitte beachten Sie, dass dies keinesfalls eine dauerhafte Lösung ist. Nur ein Hack, der das Debuggen einfacher machen kann.
Wenn Sie ein Array direkt drucken, erhalten Sie die interne Darstellung und den Hashcode. Jetzt haben alle Klassen
Object
den übergeordneten Typ. Also, warum nicht die hackenObject.toString()
? Ohne Änderung sieht die Object-Klasse folgendermaßen aus:Was ist, wenn dies geändert wird in:
Diese modifizierte Klasse kann einfach zum Klassenpfad hinzugefügt werden, indem der Befehlszeile Folgendes hinzugefügt wird :
-Xbootclasspath/p:target/classes
.Mit der Verfügbarkeit von
deepToString(..)
seit Java 5toString(..)
kann das nun leicht geändert werdendeepToString(..)
, um Unterstützung für Arrays hinzuzufügen, die andere Arrays enthalten.Ich fand das ein ziemlich nützlicher Hack und es wäre großartig, wenn Java dies einfach hinzufügen könnte. Ich verstehe mögliche Probleme mit sehr großen Arrays, da die Zeichenfolgendarstellungen problematisch sein können. Vielleicht geben Sie so etwas wie ein
System.out
oder einPrintWriter
für solche Eventualitäten.quelle
if
Bedingungen für jedes Objekt ausführen ?Object
gemeinsamen übergeordneten Element abhängig zu sein ? Können wir diese Idee weiter ausarbeiten? Nicht, dass ich denke, dass das Ändern des Standardverhaltens von java.lang. * -Objekten etwas ist, das ich ermutigen würde ...Es sollte immer funktionieren, egal welche JDK-Version Sie verwenden:
Es wird funktionieren, wenn das
Array
Objekte enthält. Wenn dasArray
primitive Typen enthält, können Sie Wrapper-Klassen verwenden, anstatt das Grundelement direkt als .. zu speichern.Beispiel:
Ersetzen Sie es durch:
Update:
Ja ! Dies ist zu erwähnen, dass das Konvertieren eines Arrays in ein Objektarray ODER die Verwendung des Objektarrays kostspielig ist und die Ausführung verlangsamen kann. Es geschieht durch die Natur von Java, die Autoboxing genannt wird.
Es sollte also nur zum Drucken verwendet werden. Wir können eine Funktion erstellen, die ein Array als Parameter verwendet und das gewünschte Format als druckt
quelle
toString(..)
, besiegt es mich, warum jemand dies jemals tun würde.In Java 8 ist es einfach. Es gibt zwei Schlüsselwörter
Arrays.stream(intArray).forEach
Methodenreferenz:
::println
Wenn Sie alle Elemente im Array in derselben Zeile drucken möchten, verwenden Sie einfach
print
anstelle vonprintln
ieEin anderer Weg ohne Methodenreferenz verwenden Sie einfach:
quelle
Es gibt eine zusätzliche Möglichkeit, wenn Ihr Array vom Typ char [] ist:
druckt
quelle
Um alle Antworten zu ergänzen, können Sie das Objekt auch als JSON-Zeichenfolge drucken.
Verwenden von Jackson:
Verwenden von Gson:
quelle
Sie können das Array durchlaufen und jedes Element während der Schleife ausdrucken. Zum Beispiel:
Ausgabe:
quelle
Es gibt folgende Möglichkeiten, ein Array zu drucken
quelle
Eine vereinfachte Verknüpfung, die ich ausprobiert habe, ist folgende:
Es wird gedruckt
Bei diesem Ansatz sind keine Schleifen erforderlich, und dies ist am besten nur für kleine Arrays geeignet
quelle
For-each-Schleife kann auch zum Drucken von Array-Elementen verwendet werden:
quelle
quelle
Die Verwendung von org.apache.commons.lang3.StringUtils.join (*) -Methoden kann eine Option sein
. Beispiel:
Ich habe die folgende Abhängigkeit verwendet
quelle
Dies ist als Duplikat zum Drucken eines Bytes [] markiert . Hinweis: Für ein Byte-Array gibt es möglicherweise zusätzliche Methoden.
Sie können es als Zeichenfolge drucken, wenn es ISO-8859-1-Zeichen enthält.
oder wenn es eine UTF-8-Zeichenfolge enthält
oder wenn Sie es als hexadezimal drucken möchten.
oder wenn Sie es als base64 drucken möchten.
oder wenn Sie ein Array von vorzeichenbehafteten Bytewerten drucken möchten
oder wenn Sie ein Array von vorzeichenlosen Bytewerten drucken möchten
quelle
quelle
wenn Sie jdk 8 ausführen.
Ausgabe:
quelle
toString()
im Finale überflüssig entfernenSystem.out.println()
und es verwenden,joiner.add(element.toString())
anstatt die leere Zeichenfolge hinzuzufügen. Diese Lösung funktioniert auch für Arrays nicht-primitiver Typen einheitlich.element.toString()
Inneresjoiner.add()
ist nur für nicht-primitive Typen. Sie müssen nochInteger.toString(element)
ähnliche Konstrukte für primitive Typen verwenden. Persönlich habe ich für jede Schleifefor (int element : array) joiner.add(Integer.toString(element));
anstelle von Streams verwendet, aber das ist Geschmackssache.In Java 8:
quelle
Bei Verwendung der Commons.Lang-Bibliothek , können wir tun:
ArrayUtils.toString(array)
Ausgabe:
quelle
// Wenn Sie die Adresse des Array-Elements auf der Konsole in Java drucken.
quelle
Es gibt verschiedene Möglichkeiten, Array-Elemente zu drucken. Zunächst erkläre ich, was ein Array ist. Array ist eine einfache Datenstruktur zum Speichern von Daten. Wenn Sie ein Array definieren, weisen Sie einen Satz zusätzlicher Speicherblöcke zu in RAM.Diese Speicherblöcke werden eine Einheit genommen ..
Ok, ich werde ein Array wie dieses erstellen,
Schauen Sie sich nun die Ausgabe an,
Sie können sehen, dass eine unbekannte Zeichenfolge gedruckt wird. Wie bereits erwähnt, wird die Speicheradresse gedruckt, deren Array (Zahlenarray) deklariert ist. Wenn Sie Elemente im Array anzeigen möchten, können Sie "for loop" wie folgt verwenden.
Schauen Sie sich nun die Ausgabe an,
Ok, Elemente eines eindimensionalen Arrays erfolgreich gedruckt. Jetzt werde ich ein zweidimensionales Array betrachten. Ich werde ein zweidimensionales Array als "number2" deklarieren und die Elemente mit dem Schlüsselwort "Arrays.deepToString ()" drucken Sie müssen die Bibliothek 'java.util.Arrays' importieren.
Betrachten Sie die Ausgabe,
Gleichzeitig können mit zwei for-Schleifen 2D-Elemente gedruckt werden. Vielen Dank!
quelle