Já vimos que o objeto string é imutável, ou seja, não sofre alteração.
Mas vira e mexe precisamos fazer repetidas operações com uma string e isso pode se tornar oneroso. Afinal, quando alteramos uma string, uma nova alocação de memória é feita.
Para estas situações podemos utilizar outra classe, a StringBuilder. Ela não cria outro objeto em memoria toda vez que é alterada e tem um melhor desempenho nestas ocasiões.
Criando Uma StringBuilder
A classe StringBuilder pode ser encontrada no namespace System.Text.
Você pode usar o tipo qualificado completo
namespace UtilizandoStringBuilder { public static class Program { static void Main() { System.Text.StringBuilder temp = new System.Text.StringBuilder(); } } }
ou importar o namespace System.Text, assim:
using System.Text; namespace UtilizandoStringBuilder { public static class Program { static void Main() { StringBuilder temp = new StringBuilder(); } } }
Além de usar o construtor, você pode instanciar e inicializar uma stringbuilder ao mesmo tempo utilizando uma sobrecarga do construtor:
StringBuilder tmpStringBuilder = new StringBuilder("Frase Exemplo");
Capacidade e Comprimento
Você pode especificar um valor para o número máximo de caracteres que uma StringBuilder pode conter. Este número é a capacidade do objeto.
OBS: Não confunda com o tamanho do seu conteúdo… Este valor é o número máximo de caracteres que você pode colocar dentro da StringBuilder. Para saber a quantidade de texto dentro dele, utilize a propriedade Length.
Criando uma instância de StringBuilder com a frase “Frase Exemplo” e especificar uma capacidade de 50 caracteres:
StringBuilder tmpStringBuilder = new StringBuilder("Frase Exemplo", 50);
Uma outra maneira de você fazer a mesma coisa é utilizar a propriedade Capacity:
StringBuilder tmpStringBuilder = new StringBuilder("Frase Exemplo"); tmpStringBuilder.Capacity = 50;
Neste exemplo, enquanto o conteúdo da StringBuilder for menor que 50 não haverá realocação de espaço na memória.
Modificando O Conteúdo De Uma StringBuilder
Append – Acrescentando
O método Append inclui informações no final da StringBuilder:
using System; using System.Text; namespace ExemploAppend { public static class Program { static void Main() { StringBuilder temp = new StringBuilder("Isto é um exemplo."); temp.Append("Isto é outro exemplo."); Console.WriteLine(temp.ToString()); } } }
AppendFormat – Acrescentando Formatado
O AppendFormat inclui informações no final da StringBuilder, formatando o texto da mesma forma que o String.Format():
using System; using System.Text; namespace ExemploAppendFormat { public static class Program { static void Main() { StringBuilder temp = new StringBuilder("Isto é um exemplo."); temp.AppendFormat(" Hoje é {0:dd/MM/yyyy}", DateTime.Now); Console.WriteLine(temp.ToString()); } } }
Insert – Incluindo
Inclui informação na StringBuilder. Você deve especificar a posição onde esta inclusão deve ser feita.
using System; using System.Text; namespace ExemploInsert { public static class Program { static void Main() { StringBuilder temp = new StringBuilder("Isto é um exemplo."); temp.Insert(4, " Texto a incluir"); Console.WriteLine(temp.ToString()); } } }
Remove – Removendo
Remove parte da informação de uma StringBuidler. Você deve especificar a posição e quantas posições devem ser removidas.
using System; using System.Text; namespace ExemploRemove { public static class Program { static void Main() { StringBuilder temp = new StringBuilder("Isto é um exemplo."); temp.Remove(4, 2); Console.WriteLine(temp.ToString()); } } }
Replace – Substituindo
Substitui parte da informação dentro da StringBuilder por outra. Você deve especificar qual texto deve ser substituído e qual texto deve ser colocado no lugar.
O exemplo abaixo substitui o caractere “m” por um espaço em branco.
using System; using System.Text; namespace ExemploReplace { public static class Program { static void Main() { StringBuilder temp = new StringBuilder("Isto é um exemplo."); temp.Replace("m", " "); Console.WriteLine(temp.ToString()); } } }
Convertendo Uma StringBuilder Em Uma String
Para utilizar o conteúdo do StringBuilder em um método que recebe uma string como parâmetro – para exibir na tela, por exemplo, devemos antes converte-lo em uma String através do método ToString da StringBuilder.
Veja um exemplo abaixo:
using System.Text; namespace ConvertendoStringBuilder { public static class Program { static void Main() { StringBuilder temp = new StringBuilder(); temp.Append(“Isto é um exemplo.”); Console.WriteLine(temp.ToString()); } } }
Palavras Finais
Quando manipulamos muito texto em nossos programas podemos ter problemas de performance por conta de uma particularidade do objeto String.
A String é “recriada” toda vez que há alguma alteração em seu conteúdo.
Desta forma, podemos utilizar o objeto StringBuilder ao invés da String. Ao contrário da StringBuilder, que é realocada somente quando o conteúdo dela ultrapassa a sua capacidade máxima. O objeto StringBuilder foi criado justamente para ser utilizado nestes casos e oferece uma melhora no desempenho significativa.
Porém antes de utilizarmos qualquer método que recebe uma String como parâmetro, devemos converte-lo em String através do método ToString().
Mas como saber quando utilizar String ou StringBuilder?
Isso será assunto para outro post!
Meu e-book Como Aprender a Programar do Absoluto Zero está GRATUITO por tempo limitado!
Olha o link: 👉🏼 http://celsokitamura.com.br/como-aprender-a-programar
Bora aprender a programar!