Java에서 목록을 쉼표로 구분하는 가장 명확한 방법은 무엇입니까?
여러 가지 방법을 알고 있지만 가장 좋은 방법이 무엇인지 궁금합니다 ( "최고"는 가장 효율적이지 않고 가장 명확하고 짧은 것을 의미합니다.
나는 목록이 있고 그것을 반복하여 각 값을 인쇄하고 싶습니다. 각 항목 사이에 쉼표를 인쇄하고 싶지만 마지막 항목 뒤 (또는 첫 번째 항목 앞)가 아닙니다.
List --> Item ( , Item ) *
List --> ( Item , ) * Item
샘플 솔루션 1 :
boolean isFirst = true;
for (Item i : list) {
if (isFirst) {
System.out.print(i); // no comma
isFirst = false;
} else {
System.out.print(", "+i); // comma
}
}
샘플 솔루션 2-하위 목록 만들기 :
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
}
}
샘플 솔루션 3 :
Iterator<Item> i = list.iterator();
if (i.hasNext()) {
System.out.print(i.next());
while (i.hasNext())
System.out.print(", "+i.next());
}
이들은 첫 번째 항목을 특별히 취급합니다. 대신 마지막 하나를 특별히 다룰 수 있습니다.
덧붙여, 여기에 어떻게 List
toString
되어 (이 상속 것 구현 AbstractCollection
자바 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(", ");
}
}
마지막 항목 뒤의 쉼표를 피하기 위해 루프를 일찍 종료합니다. BTW : "(이 컬렉션)"을 본 것은 이번이 처음입니다. 그것을 유발하는 코드는 다음과 같습니다.
List l = new LinkedList();
l.add(l);
System.out.println(l);
예기치 않은 라이브러리 (regexp?)를 사용하더라도 모든 솔루션을 환영합니다. 자바 이외의 언어로도 솔루션 (예를 들어 파이썬 / 루비가 생각 산재 기능 - 방법 있음 ? 구현을).
설명 : 라이브러리 란 표준 Java 라이브러리를 의미합니다. 다른 라이브러리의 경우 다른 언어로 고려하고 구현 방법을 알고 싶습니다.
EDIT 툴킷이 비슷한 질문을 언급했습니다. 자바에서 향상된 for 루프의 마지막 반복
그리고 또 다른 : 루프의 마지막 요소는 별도의 처리가 필요합니까?