Concatenação de Strings

6 respostas
oitathi

Olá, eu ouvi dizer que concater Strings usando + não dá um bom desempenho no programa e que a melhor solução seria utilizar StringBuffer.
Eu fiz isso no programa e está rodando direitinho, mas eu gostaria de saber primeiramente se eu fiz da maneira correta e se caso positivo, se não existe uma forma mais eficiente e menor para isso! Valeu!!

StringBuffer strBuf = new StringBuffer();
strBuf.append(date);
strBuf.append("     ");
strBuf.append(time);
strBuf.append("     ");
strBuf.append(lat);
strBuf.append("     ");
strBuf.append(lon);
strBuf.append("     ");
strBuf.append(alt);
strBuf.append("     ");
strBuf.append(trk);
strBuf.append("     ");
strBuf.append(vel);
strBuf.append("     ");
strBuf.append(mode);
linha= strBuf.toString();

6 Respostas

samuel.grigolato

Tem o apache-commons-lang:

http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.lang.Iterable, java.lang.String)

StringUtils.join(listaDeStrings, "    ");
Bani

Está certo.
Se o seu programa não tiver problema de concorrência de várias threads, StringBuilder é mais recomendado do que StringBuffer. A sintaxe é a mesma.
E para ficar menor, você pode ir juntando várias coisas na mesma linha chamando os métodos encadeados, por exemplo:

strBuf.append(date).append(" ").append(time);

ViniGodoy

Concatenar Strings não dá bom desempenho quando a concatenação ocorre dentro de um loop. Nesse caso, você pode concatenar com + mesmo.
E não é o StringBuffer que você deve usar. Ele é sincronizado. O que você usa é o StringBuilder.

Outra coisa. O método append retorna o próprio StringBuilder. Isso permite que você simplifique o código, veja:

String linha = new StringBuilder() .append(date).append(" ").append(time).append(" ") .append(lat).append(" ").append(lon).append(" ").append(alt).append(" ") .append(trk).append(" ").append(vel).append(" ") .append(mode).toString();

Outra forma de fazer é usando o String.format. A vantagem é que você ainda terá opções para formatar a data e hora e os valores numéricos.

dsystem

ViniGodoy sempre SIMPLIFICANDO. Caramba esse eu não conhecia, mais uma vez, Parabens Vini!!!

J
String.format("Data: %s  Hora:%s", data, hora);

Modifique para a sua necessidade.

Até mais.

oitathi

Ah tah, valeu!!!

Criado 28 de julho de 2010
Ultima resposta 28 de jul. de 2010
Respostas 6
Participantes 6