Java'da bir listeyi virgülle sınırlandırmanın en net yolu nedir?
Bunu yapmanın birkaç yolunu biliyorum, ancak en iyi yolun ne olduğunu merak ediyorum (burada "en iyi", en verimli değil, en net ve / veya en kısa anlamına gelir.
Bir listem var ve her bir değeri yazdırarak üzerinde döngü yapmak istiyorum. Her öğe arasına virgül yazdırmak istiyorum, ancak sonuncudan sonra değil (veya ilkinden önce).
List --> Item ( , Item ) *
List --> ( Item , ) * Item
Örnek çözüm 1:
boolean isFirst = true;
for (Item i : list) {
if (isFirst) {
System.out.print(i); // no comma
isFirst = false;
} else {
System.out.print(", "+i); // comma
}
}
Örnek çözüm 2 - bir alt liste oluşturun:
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
}
}
Örnek çözüm 3:
Iterator<Item> i = list.iterator();
if (i.hasNext()) {
System.out.print(i.next());
while (i.hasNext())
System.out.print(", "+i.next());
}
Bunlar ilk öğeyi özel olarak ele alır; bunun yerine sonuncusuna özel olarak davranılabilir.
Bu arada, burada nasıl List
toString
olduğu (o devralınan uygulanan AbstractCollection
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(", ");
}
}
Son öğeden sonra virgülden kaçınmak için döngüden erken çıkar. BTW: "(bu Koleksiyon)" u gördüğümü ilk kez hatırlıyorum; işte onu kışkırtacak kod:
List l = new LinkedList();
l.add(l);
System.out.println(l);
Beklenmedik kitaplıklar kullansalar bile (regexp?) Herhangi bir çözümü memnuniyetle karşılıyorum; ve Java dışındaki dillerde de çözümler (örneğin Python / Ruby bir var serpmek fonksiyonu - nasıl olduğunu ? uygulanmaktadır).
Açıklama : kütüphaneler derken standart Java kütüphanelerini kastediyorum. Diğer kütüphaneler için, onları diğer dillerle birlikte değerlendiriyorum ve nasıl uygulandıklarını öğrenmekle ilgileniyorum.
DÜZENLEME araç seti benzer bir sorudan bahsetti: Java'da geliştirilmiş for döngüsünün son yinelemesi
Ve bir diğeri: Bir döngüdeki son öğe ayrı bir muameleyi hak ediyor mu?