KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
What is the clearest way to comma-delimit a list in Java? I know several ways of doing it, but I'm wondering what the best way is (where "best" means clearest and/or shortest, not the most efficient. I have a list and I want to loop over it, printing each value. I want to print a comma between each item, but not after the last one (nor before the first one). List --> Item ( , Item ) * List --> ( Item , ) * Item Sample solution 1: boolean isFirst = true; for (Item i : list) { if (isFirst) { System.out.print(i); // no comma isFirst = false; } else { System.out.print(", "+i); // comma } } Sample solution 2 - create a 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 } } Sample solution 3: Iterator<Item> i = list.iterator(); if (i.hasNext()) { System.out.print(i.next()); while (i.hasNext()) System.out.print(", "+i.next()); } These treat the first item specially; one could instead treat the last one specially. Incidentally, here is how List toString is implemented (it's inherited from 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(", "); } } It exits the loop early to avoid the comma after the last item. BTW: this is the first time I recall seeing "(this Collection)"; here's code to
Tags (comma-separated)
Save Edits
Cancel