Was ist der klarste Weg, eine Liste in Java durch Kommas zu trennen?
Ich kenne verschiedene Möglichkeiten, aber ich frage mich, was der beste Weg ist (wobei "am besten" am klarsten und / oder am kürzesten bedeutet, nicht am effizientesten.
Ich habe eine Liste und möchte sie durchlaufen und jeden Wert drucken. Ich möchte zwischen jedem Element ein Komma drucken, aber nicht nach dem letzten (noch vor dem ersten).
List --> Item ( , Item ) *
List --> ( Item , ) * Item
Probenlösung 1:
boolean isFirst = true;
for (Item i : list) {
if (isFirst) {
System.out.print(i); // no comma
isFirst = false;
} else {
System.out.print(", "+i); // comma
}
}
Beispiellösung 2 - Erstellen Sie eine Unterliste:
if (list.size()>0) {
System.out.print(list.get(0)); // no comma
List theRest = list.subList(1, list.size());
for (Item i : theRest) {
System.out.print(", "+i); // comma
}
}
Probenlösung 3:
Iterator<Item> i = list.iterator();
if (i.hasNext()) {
System.out.print(i.next());
while (i.hasNext())
System.out.print(", "+i.next());
}
Diese behandeln den ersten Gegenstand besonders; man könnte stattdessen den letzten speziell behandeln.
Im übrigen ist hier, wie List
toString
wird umgesetzt (es ist geerbt von AbstractCollection
), in Java 1.6:
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}
Es verlässt die Schleife vorzeitig, um das Komma nach dem letzten Element zu vermeiden. Übrigens: Dies ist das erste Mal, dass ich mich erinnere, "(diese Sammlung)" gesehen zu haben. Hier ist der Code, um es zu provozieren:
List l = new LinkedList();
l.add(l);
System.out.println(l);
Ich begrüße jede Lösung, auch wenn sie unerwartete Bibliotheken verwenden (regulärer Ausdruck?); und auch Lösungen in anderen Sprachen als Java (z. B. denke ich, dass Python / Ruby eine Intersperse- Funktion haben - wie ist das implementiert?).
Klarstellung : Mit Bibliotheken meine ich die Standard-Java-Bibliotheken. Für andere Bibliotheken betrachte ich sie mit anderen Sprachen und bin daran interessiert zu wissen, wie sie implementiert sind.
Das EDIT- Toolkit erwähnte eine ähnliche Frage: Letzte Iteration der erweiterten for-Schleife in Java
Und noch eines: Verdient das letzte Element in einer Schleife eine separate Behandlung?