Apa cara paling jelas untuk memisahkan koma-batasi daftar di Java?
Saya tahu beberapa cara melakukannya, tetapi saya bertanya-tanya apa cara terbaik (di mana "terbaik" berarti paling jelas dan / atau terpendek, bukan yang paling efisien.
Saya memiliki daftar dan saya ingin mengulanginya, mencetak setiap nilai. Saya ingin mencetak koma di antara setiap item, tetapi tidak setelah yang terakhir (atau sebelum yang pertama).
List --> Item ( , Item ) *
List --> ( Item , ) * Item
Solusi sampel 1:
boolean isFirst = true;
for (Item i : list) {
if (isFirst) {
System.out.print(i); // no comma
isFirst = false;
} else {
System.out.print(", "+i); // comma
}
}
Solusi sampel 2 - buat sublist:
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
}
}
Solusi sampel 3:
Iterator<Item> i = list.iterator();
if (i.hasNext()) {
System.out.print(i.next());
while (i.hasNext())
System.out.print(", "+i.next());
}
Ini memperlakukan item pertama secara khusus; seseorang malah bisa memperlakukan yang terakhir secara khusus.
Kebetulan, di sini adalah bagaimana List
toString
yang dilaksanakan (itu diwarisi dari AbstractCollection
), di 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(", ");
}
}
Ini keluar dari loop lebih awal untuk menghindari koma setelah item terakhir. BTW: ini pertama kalinya saya ingat melihat "(Koleksi ini)"; berikut kode untuk memprovokasi itu:
List l = new LinkedList();
l.add(l);
System.out.println(l);
Saya menyambut baik solusi apapun, bahkan jika mereka menggunakan perpustakaan yang tidak terduga (regexp?); dan juga solusi dalam bahasa lain selain Java (misalnya saya pikir Python / Ruby memiliki menyelingi fungsi - bagaimana itu ? diimplementasikan).
Klarifikasi : menurut perpustakaan, yang saya maksud adalah perpustakaan Java standar. Untuk perpustakaan lain, saya mempertimbangkannya dengan bahasa lain, dan tertarik untuk mengetahui bagaimana penerapannya.
Toolkit EDIT menyebutkan pertanyaan serupa: iterasi terakhir untuk loop ditingkatkan di java
Dan lainnya: Apakah elemen terakhir dalam sebuah loop membutuhkan perlakuan terpisah?