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!
![[LIVE] A Importância De Um Mentor No Aprendizado De Programação](https://celsokitamura.com.br/wp-content/uploads/2023/12/XXX-Importancia-de-um-Mentor-218x122.jpg)


Deixe um comentário