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/

2voto

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

2voto

Peter Lawrey Punkte 511323

Dies ist als Duplikat markiert für Drucken eines Byte[] . Hinweis: Für ein Byte-Array gibt es zusätzliche Methoden, die geeignet sein können.

Sie können ihn als String drucken, wenn er ISO-8859-1-Zeichen enthält.

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

oder wenn sie eine UTF-8-Zeichenfolge enthält

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

oder wenn Sie es als Hexadezimalwert drucken möchten.

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

oder wenn Sie es als base64 drucken wollen.

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

oder wenn Sie ein Array von vorzeichenbehafteten Byte-Werten drucken wollen

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

oder wenn Sie ein Array von Byte-Werten ohne Vorzeichen drucken wollen

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.

2voto

duyuanchao Punkte 3165

Wenn Sie jdk 8 verwenden.

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

Ausgabe:

[7,3,5,1,3]

0 Stimmen

Dies ist besser als die akzeptierte Antwort, da es mehr Kontrolle über das Trennzeichen, Präfix und Suffix gibt. Ich würde jedoch überflüssige toString() in der Endrunde System.out.println() und verwendet es in joiner.add(element.toString()) anstatt die leere Zeichenkette hinzuzufügen. Diese Lösung funktioniert auch für Arrays von nicht-primitiven Typen, einheitlich.

0 Stimmen

Mein Fehler, element.toString() innerhalb joiner.add() ist nur für nicht-primitive Typen. Sie müssen immer noch Integer.toString(element) - wie Konstrukte für primitive Typen. Ich persönlich habe die foreach-Schleife for (int element : array) joiner.add(Integer.toString(element)); anstelle von Strömen, aber das ist Geschmackssache.

2voto

Anis KCHAOU Punkte 365

Wenn Sie Java 11 verwenden

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("]", ""));
     }
}

Ausgang :

John Mahta Sara

1voto

Mehdi Punkte 1167

In Java 8 :

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

0 Stimmen

Diejenigen, die eine Abstimmung erstellt haben, um meine Antwort zu entfernen können Sie Ihren Standpunkt darlegen, damit alle lernen können? Die Frage fragte nach dem einfachsten Weg in Java, so ist es ein Einzeiler, Java aktuelle Version ist >14 und meine Lösung ist für mindestens Java 8 (so ist es anwendbar).

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