[Code Ramp UP] – Removendo vírgula no final de uma string

Olá! Baseando sempre em fatos, compartilho com vocês uma experiência simples e que boa parte dos developers esquecem que existe ou não sabem o uso quando vão trabalhar com strings.

Vamos lá.

Já vi em alguns métodos que recebem Strings com algum “caracter inútil” no final, que geralmente é resultado de uma concatenação, por exemplo a vírgula abaixo:

"pêra, uva, maçã, "

Um código que sempre aparece nessa hora é algo como abaixo:

StringBuilder sb = new StringBuilder("1, 2, 3, ");   

string resultado1 = sb.ToString(0, sb.Length - 2);
Console.WriteLine(resultado1);

E dá para resolver de maneira bem mais elegante e eficiente com o TrimEnd():

string resultado2 = sb.ToString().TrimEnd(',', ' ');
Console.WriteLine(resultado2);

Para melhorar o entendimento, imagine que você desenvolveu método que espera um array de até 4 parâmetros, concatena com vírgulas e monta uma string afim de imprimir em tela como abaixo:

private static string FormataString(Object[] vetor)
{
	StringBuilder parametros = new StringBuilder();
	parametros.AppendFormat("{0}, {1}, {2}, {3}", vetor);

	string frase = "Times escolhidos: ";
	StringBuilder fraseCompleta = new StringBuilder();
	fraseCompleta.AppendFormat("{0} {1}", frase, parametros);

	return fraseCompleta.ToString().TrimEnd(',', ' ');
}

Assim sendo, você poderá utilizar de um até quatro parâmetros sem precisar se preocupar com aquela “vírgula” do final.

Object[] vetor = {"Goiás", "Vila Nova", "Atlético", null};
Console.WriteLine(FormataString(vetor));

Dê uma olhada também no TrimStart(), para fazer o mesmo, só que no início da string. E para enfatizar, lembre-se que concatenações de string sempre com o StringBuilder, ok?! Comente e dê sugestões para o Code Ramp Up!

Não sabe o que é o Code Ramp Up?!
Leia aqui.

  • Carlos Alberto

    Achei o problema muito trivial e a solução, que aceita arrays com até 4 argumentos, muito limitada.

    Por que não usar String.Join (não programo em c# e achei a solução no primeiro resultado do google)?

    http://msdn.microsoft.com/en-us/library/57a79xd0(v=vs.110).aspx

  • Olá Carlos.
    Obrigado pelo feedback. A ideia é que seja realmente simples de entender.
    Mesmo existindo algumas formas de resolver este problema, como foi informado, o que foi mostrado acima é de como é simples solucionar o problema chamando apenas o método TrimEnd.

    O vetor “defeituoso” poderia ser evitado se o developer estivesse usado “String.join” como você mencionou. Porém, existem cenários que isto chega pra sua aplicação da forma que mencionei (e acontece direto.. pode acreditar).

    De toda forma vou colocar esta observação como update do post.
    Abraço!