Melhor Idiom de Loop para revestimento especial do último elemento

Eu me deparo com esse caso várias vezes ao executar instruções simples de processamento de texto e impressão, em que estou fazendo um loop sobre uma coleção e quero incluir um caso especial no último elemento (por exemplo, todo elemento normal será separado por vírgula, exceto o último caso).

Existe algum idioma de prática recomendada ou forma elegante que não exija duplicação de código ou inserção em um if, senão no loop.

Por exemplo, tenho uma lista de seqüências de caracteres que quero imprimir em uma lista separada por vírgula. (a solução do while já assume que a lista possui 2 ou mais elementos, caso contrário, seria tão ruim quanto o loop for mais correto com condicional).

por exemplo. Lista = ("cachorro", "gato", "morcego")

Quero imprimir "[cachorro, gato, morcego]"

Eu apresento 2 métodos

Loop for com condicional

public static String forLoopConditional(String[] items) {

String itemOutput = "[";

for (int i = 0; i < items.length; i++) {
    // Check if we're not at the last element
    if (i < (items.length - 1)) {
        itemOutput += items[i] + ", ";
    } else {
        // last element
        itemOutput += items[i];
    }
}
itemOutput += "]";

return itemOutput;
 }

loop while fazendo o loop

public static String doWhileLoopPrime(String[] items) {
String itemOutput = "[";
int i = 0;

itemOutput += items[i++];
if (i < (items.length)) {
    do {
        itemOutput += ", " + items[i++];
    } while (i < items.length);
}
itemOutput += "]";

return itemOutput;
}

Classe do testador:

public static void main(String[] args) {
    String[] items = { "dog", "cat", "bat" };

    System.out.println(forLoopConditional(items));
    System.out.println(doWhileLoopPrime(items));

}

Na classe Java AbstractCollection, ele possui a seguinte implementação (um pouco detalhada, pois contém todas as verificações de erros de maiúsculas e minúsculas, mas não é ruim).

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(", ");
}
}

questionAnswers(18)

yourAnswerToTheQuestion