[java] Java에서 향상된 for 루프의 마지막 반복

루프가 마지막으로 반복되는지 확인하는 방법이 있습니까? 내 코드는 다음과 같습니다

int[] array = {1, 2, 3...};
StringBuilder builder = new StringBuilder();

for(int i : array)
{
    builder.append("" + i);
    if(!lastiteration)
        builder.append(",");
}

이제 마지막 반복에서 쉼표를 추가하고 싶지 않습니다. 이제 마지막 반복인지 확인하거나 for 루프 또는 외부 카운터를 사용하여 추적을 유지하고 있는지 확인할 수있는 방법이 있습니다.



답변

또 다른 대안은 i를 추가하기 전에 첫 번째 반복이 아닌 쉼표를 추가하는 것 입니다. (단 "" + i,를 사용하지 마십시오 -실제로 연결을 원하지 않으며 StringBuilder에는 append (int) 오버로드가 완벽하게 좋습니다.)

int[] array = {1, 2, 3...};
StringBuilder builder = new StringBuilder();

for (int i : array) {
    if (builder.length() != 0) {
        builder.append(",");
    }
    builder.append(i);
}

이것에 대한 좋은 점은 어떤 것으로도 작동한다는 Iterable것입니다. 항상 색인을 생성 할 수는 없습니다. ( “쉼표를 추가하고 마지막에 제거”는 실제로 StringBuilder를 사용할 때 좋은 제안입니다. 그러나 스트림에 쓰는 것과 같은 작업에는 작동하지 않습니다. 그러나이 정확한 문제에 대한 최선의 방법 일 수 있습니다. )


답변

이를 수행하는 다른 방법 :

String delim = "";
for (int i : ints) {
    sb.append(delim).append(i);
    delim = ",";
}

업데이트 : Java 8의 경우 이제 수집기가 있습니다.


답변

항상 추가하는 것이 더 쉬울 수 있습니다. 그런 다음 루프를 완료하면 최종 캐릭터를 제거하십시오. 그런 식으로 조건을 줄입니다.

StringBuilderdeleteCharAt(int index)색인을 사용하여를 사용할 수 있습니다length() - 1


답변

작업에 잘못된 도구를 사용하고있을 수 있습니다.

이것은 당신이하는 일보다 더 수동적이지만 조금 “오래된 학교”가 아니라면 더 우아합니다.

 StringBuffer buffer = new StringBuffer();
 Iterator iter = s.iterator();
 while (iter.hasNext()) {
      buffer.append(iter.next());
      if (iter.hasNext()) {
            buffer.append(delimiter);
      }
 }


답변

이것은 이 StackOverflow 질문 의 거의 반복입니다 . 원하는 것은 StringUtils 이며 join 메소드 를 호출하는 것입니다.

StringUtils.join(strArr, ',');


답변

다른 솔루션 (아마도 가장 효율적인)

    int[] array = {1, 2, 3};
    StringBuilder builder = new StringBuilder();

    if (array.length != 0) {
        builder.append(array[0]);
        for (int i = 1; i < array.length; i++ )
        {
            builder.append(",");
            builder.append(array[i]);
        }
    }


답변

간단하게 유지하고 표준 for 루프를 사용하십시오.

for(int i = 0 ; i < array.length ; i ++ ){
    builder.append(array[i]);
    if( i != array.length - 1 ){
        builder.append(',');
    }
}

또는 아파치 commons-lang StringUtils.join ()을 사용하십시오.