18 Stimmen

Äquivalent zu PHP's print_r in Java?

Als ich das letzte Mal fragte, wie man eine Datenstruktur auffüllt ici . Jetzt würde ich gerne wissen, ob es in Java etwas gibt, wie die drucken_r Ich verwende PHP, um darzustellen, was ich in die Karten und Listen eingefügt habe, ohne meinen eigenen Algorithmus anwenden zu müssen.

Irgendwelche Ideen?

10voto

workmad3 Punkte 24502

Aufruf von toString auf die Sammlung sollte eine Zeichenkette zurückgeben, die alle Elemente als Zeichenketten darstellt.

Dies funktioniert jedoch nicht mit eingebauten Arrays, da diese keine toString überschreiben und Ihnen nur eine Speicheradresse geben.

10voto

darpet Punkte 2973

Es gibt einen großen Unterschied zwischen toString() in Java und print_r() in PHP. Beachten Sie, dass es auch __toString() in PHP gibt, was toString() in Java entspricht, also ist dies nicht wirklich die Antwort.

print_r wird verwendet, wenn wir eine Struktur von Objekten haben und schnell den kompletten Graphen der Objekte mit ihren Werten sehen möchten.

Die Implementierung von toString in Java für jedes Objekt ist nicht mit print_r zu vergleichen.

Verwenden Sie stattdessen gson. Es erledigt die gleiche Aufgabe wie print_r

Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println(gson.toJson(someObject));

Auf diese Weise müssen Sie nicht für jedes Objekt, das Sie testen wollen, toString implementieren.

Hier ist die Dokumentation: http://sites.google.com/site/gson/gson-user-guide

Demo-Klassen (in Java):

public class A {

int firstParameter = 0;
B secondObject = new B();

}

public class B {

String myName = "this is my name";  

}

Hier ist die Ausgabe in php mit print_r:

Objekt
(
[firstParameter:private] => 0
[secondObject:private] => B Object
(
[meinName:privat] => das ist mein Name
)

)

Hier ist die Ausgabe in Java mit gson:

{
"ersterParameter": 0,
"secondObject": {
"meinName": "Dies ist mein Name"
}
}

8voto

laz Punkte 27769

Je nachdem, was genau Sie tun wollen, könnte die Lösung recht einfach sein. Das folgende Beispiel erzeugt nicht die formatierte Ausgabe, die print_r bietet, aber es ermöglicht Ihnen die Ausgabe der Struktur von Listen, Arrays und Maps:

    // Output a list
    final List<String> list = new ArrayList<String>();
    list.add("one");
    list.add("two");
    list.add("three");
    list.add("four");
    System.out.println(list);

    // Output an array
    final String[] array = {"four", "three", "two", "one"};
    System.out.println(Arrays.asList(array));

    // Output a map
    final Map<String, String> map = new HashMap<String, String>();
    map.put("one", "value");
    map.put("two", "value");
    map.put("three", "value");
    System.out.println(map.entrySet());

Für andere Arten von Objekten können Sie verwenden Reflexion zur Erstellung einer Dienstprogramm zu diesem Zweck.

7voto

Tim Mooney Punkte 182

Versuchen Sie es mit dem guten alten Apache Commons Lang's ToStringBuilder .

2voto

jm4 Punkte 188

Andere haben erwähnt, dass die toString() Methode. Dies ist wirklich nur nützlich, wenn das Objekt toString() . Wenn es nicht richtig implementiert wurde, werden Sie am Ende etwas wie dieses Ergebnis haben: java.lang.Object@1b9240e .

Auch wenn es ein wenig mühsam ist, so ist es doch einfach zu realisieren toString() in Ihren eigenen Klassen, aber Klassen von Drittanbietern werden es nicht immer implementieren. Sie sind viel besser dran, wenn Sie einen Debugger verwenden. Der einzige Grund, warum Dinge wie print_r in PHP überhaupt existiert, ist das Fehlen eines echten Debuggers. Ich denke, Sie werden feststellen, dass die Möglichkeit, Haltepunkte zu setzen, anstatt einen Haufen diagnostischer Druckanweisungen zu verwenden, zu einem viel schnelleren Arbeitsablauf und saubererem Code führen 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