Apenas obtenha a posição da última ocorrência de caractere.
for(String serverId : serverIds) {
sb.append(serverId);
sb.append(",");
}
sb.deleteCharAt(sb.lastIndexOf(","));
Desde a lastIndexOf
a pesquisa inversa será executada e você sabe que ela será encontrada na primeira tentativa, o desempenho não será um problema aqui.
EDITAR
Como eu continuo levantando minha resposta (obrigado pessoal 😊), vale a pena:
No Java 8 em diante, seria mais legível e explícito usar o StringJoiner . Ele tem um método para um separador simples e uma sobrecarga para prefixo e sufixo.
Exemplos retirados daqui: exemplo
Exemplo usando separador simples:
StringJoiner mystring = new StringJoiner("-");
// Joining multiple strings by using add() method
mystring.add("Logan");
mystring.add("Magneto");
mystring.add("Rogue");
mystring.add("Storm");
System.out.println(mystring);
Resultado:
Logan-Magneto-Rogue-Storm
Exemplo com sufixo e prefixo:
StringJoiner mystring = new StringJoiner(",", "(", ")");
// Joining multiple strings by using add() method
mystring.add("Negan");
mystring.add("Rick");
mystring.add("Maggie");
mystring.add("Daryl");
System.out.println(mystring);
Resultado
(Negan, Rick, Maggie, Daryl)