Skip to main content

Join x StringBuilder x Concatenação x Concat

  • Join x StringBuilder x Concatenação x Concat

Dentro do C# temos algumas maneiras de trabalhar com texto, são elas:

  • StringBuilder
  • Concatenação
  • Concat
  • Join

Certo, e quando devo usar cada uma delas ?

  • Join é usado quando normalmente você quer adicionar vários textos separados por um caracter.
var mensagem = string.Empty;

string[] animais = {"cachorro", "gato", "dinossauro", "marmota", "esquilo"};

mensagem = string.Join(" ", animais);

Nesse caso estou criando um texto com todos os nomes dos animais separados com um espaço que foi definido no primeiro argumento da função Join.

  • Concatenação é usado quando precisamos fazer algo simples com texto como por exemplo, mostrar uma mensagem de erro com alguma informação extra vindo de uma variável.
var mensagemBase = "Houve um erro ao gravar a informação. ";

var mensagemErro = "A informação X não pode ser nula";

var mensagemFinal = mensagemBase + mensagemErro;

ou poderiamos usar a interpolação

var mensagemBase = "Houve um erro ao gravar a informação. ";

var mensagemErro = "A informação X não pode ser nula";

var mensagemFinal = $"{mensagemBase} {mensagemErro}";
  • Concat é quando temos um array de string, podendo ser uma lista ou um array mesmo e queremos tornar essa lista em uma string.
IEnumerable<string> lista = new List<string>() { "Testando ", "a ", " função", " Concat."};

string s2 = string.Concat(lista);

Console.WriteLine(s2);

/*

Retorno: Testando a  função Concat.

*/

E por último, a cereja do bolo

  • StringBuilder é usado para concatenar strings e essa classe vem com algo diferenciado para concatenação, mas primeiro vamos entender a diferença entre usar o StringBuilder e uma concatenação, por exemplo:

Quando fazemos o código abaixo

var texto = texto + "qualquer mensagem";

estamos realizando algo perigoso dependendo na onde fazemos e se você pensou que o C# substituiu o valor anterior da varíavel pelo texto que adicionamos você acabou esquecendo um conceito importante chamado IMUTABILIDADE. Strings são imutáveis, ou seja, uma vez criada não pode ser alteradas, elas só podem ser alteradas criando um novo objeto na memória e descartando o valor anterior. Então imagina o seguinte cenário onde estamos dentro de um FOR percorrendo 100 vezes e nessas 100 vezes estamos fazendo o código acima, quanta memória não alocamos para fazer o processo, não é mesmo ?

Peço que olhe com carinho os Method ConcatenaçãoManual, StringBuilder, ConcatenacaoManualFor1000Elementos e StringBuilderFor1000Elementos

Perceba que ConcatenaçãoManual e StringBuilder não há uma diferença grande, o teste realizado foi feito com poucas strings, mas agora repare em ConcatenacaoManualFor1000Elementos e StringBuilderFor1000Elementos que foi utilizado uma repetição de 1000x adicionando texto. Olhe a diferença colossal de memória alocada com a concatenaçãoManual em um FOR e usando o StringBuilder.

Mas ai pode surgir aquela pergunta, o que o StringBuilder tem de diferente da concatenação?

R:. Ele não cria um novo objeto a cada atribuição e sim expande dinamicamente a memória para caber mais strings, ou seja, não fica criando vários objetos que serão descartados rapidamente e sem contar que isso custa também para o garbage collection matar esses objetos.

Quando devo usar o StringBuilder ?

R:. Utilize o StringBuilder quando tiver que trabalhar com muita string, como por exemplo geração de arquivo de texto ou algo que envolva muito volume. Se for trabalhar com pouco texto utilize uma das funções citadas anteriormente, MAS LEMBRE-SE, UTILIZE STRINGBUILDER COM GRANDES VOLUMES DE TEXTO

Untitled