Compartilhar via


Usando a classe StringBuilder no .NET

O String objeto é imutável. Sempre que você usa um dos métodos na System.String classe, cria um novo objeto de cadeia de caracteres na memória, o que requer uma nova alocação de espaço para esse novo objeto. Em situações em que você precisa executar modificações repetidas em uma cadeia de caracteres, a sobrecarga associada à criação de um novo String objeto pode ser dispendiosa. A System.Text.StringBuilder classe pode ser usada quando você deseja modificar uma cadeia de caracteres sem criar um novo objeto. Por exemplo, usar a classe StringBuilder pode aumentar o desempenho ao concatenar muitas strings em um loop.

Importando o namespace System.Text

A StringBuilder classe é encontrada no System.Text namespace. Para evitar ter que fornecer um nome de tipo totalmente qualificado em seu código, você pode importar o System.Text namespace:

using System;
using System.Text;
Imports System.Text

Instanciando um objeto StringBuilder

Você pode criar uma nova instância da StringBuilder classe inicializando sua variável com um dos métodos de construtor sobrecarregados, conforme ilustrado no exemplo a seguir.

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
Dim myStringBuilder As New StringBuilder("Hello World!")

Definindo a capacidade e o comprimento

Embora seja StringBuilder um objeto dinâmico que permite expandir o número de caracteres na cadeia de caracteres que ele encapsula, você pode especificar um valor para o número máximo de caracteres que ele pode conter. Esse valor é chamado de capacidade do objeto e não deve ser confundido com o comprimento da cadeia de caracteres que a corrente StringBuilder contém. Por exemplo, você pode criar uma nova instância da StringBuilder classe com a cadeia de caracteres "Hello", que tem um comprimento de 5, e você pode especificar que o objeto tem uma capacidade máxima de 25. Quando você modifica o StringBuilder, ele não realoca o tamanho para si mesmo até que a capacidade seja atingida. Quando isso ocorre, o novo espaço é alocado automaticamente e a capacidade é dobrada. Você pode especificar a capacidade da StringBuilder classe usando um dos construtores sobrecarregados. O exemplo a seguir especifica que o myStringBuilder objeto pode ser expandido para um máximo de 25 espaços.

StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
Dim myStringBuilder As New StringBuilder("Hello World!", 25)

Além disso, você pode usar a propriedade de leitura/gravação Capacity para definir o comprimento máximo do objeto. O exemplo a seguir usa a propriedade Capacity para definir o comprimento máximo do objeto.

myStringBuilder.Capacity = 25;
myStringBuilder.Capacity = 25

O EnsureCapacity método pode ser usado para verificar a capacidade do StringBuilder atual. Se a capacidade for maior que o valor passado, nenhuma alteração será feita; no entanto, se a capacidade for menor que o valor passado, a capacidade atual será alterada para corresponder ao valor passado.

A Length propriedade também pode ser exibida ou definida. Se você definir a propriedade Length como um valor maior que a propriedade Capacity , a propriedade Capacity será alterada automaticamente para o mesmo valor que a propriedade Length . Definir a propriedade Length como um valor menor que o comprimento da cadeia de caracteres dentro do StringBuilder atual reduz a cadeia de caracteres.

Modificando a cadeia de caracteres do StringBuilder

A tabela a seguir lista os métodos que você pode usar para modificar o conteúdo de um StringBuilder.

Nome do método Utilização
StringBuilder.Append Acrescenta informações ao final do StringBuilder atual.
StringBuilder.AppendFormat Substitui um especificador de formato passado em uma cadeia de caracteres por texto formatado.
StringBuilder.Insert Insere uma cadeia de caracteres ou objeto no índice especificado do StringBuilder atual.
StringBuilder.Remove Remove um número especificado de caracteres do StringBuilder atual.
StringBuilder.Replace Substitui todas as ocorrências de um caractere ou cadeia de caracteres especificado no StringBuilder atual por outro caractere ou cadeia de caracteres especificado.

Acrescentar

O método Append pode ser usado para adicionar texto ou uma representação de cadeia de caracteres de um objeto ao final de uma cadeia de caracteres representada pelo StringBuilder atual. O exemplo a seguir inicializa um StringBuilder para "Hello World" e acrescenta um texto ao final do objeto. O espaço é alocado automaticamente conforme necessário.

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Append(" What a beautiful day.")
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello World! What a beautiful day.

Método AppendFormat

O StringBuilder.AppendFormat método adiciona texto ao final do StringBuilder objeto. Ele dá suporte ao recurso de formatação composta ao invocar a IFormattable implementação do objeto ou dos objetos a serem formatados. Portanto, ele aceita as cadeias de caracteres de formato padrão para valores numéricos, de data e hora e de enumeração, as cadeias de caracteres de formato personalizado para valores numéricos e de data e hora e as cadeias de caracteres de formato definidas para tipos personalizados. (Para obter informações sobre formatação, consulte Tipos de Formatação.) Você pode usar esse método para personalizar o formato das variáveis e acrescentar esses valores a um StringBuilder. O exemplo a seguir usa o AppendFormat método para colocar um valor inteiro formatado como um valor de moeda no final de um StringBuilder objeto.

int MyInt = 25;
StringBuilder myStringBuilder = new StringBuilder("Your total is ");
myStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Your total is $25.00
Dim MyInt As Integer = 25
Dim myStringBuilder As New StringBuilder("Your total is ")
myStringBuilder.AppendFormat("{0:C} ", MyInt)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'     Your total is $25.00  

Inserir

O Insert método adiciona uma cadeia de caracteres ou objeto a uma posição especificada no objeto atual StringBuilder . O exemplo a seguir usa esse método para inserir uma palavra na sexta posição de um StringBuilder objeto.

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Insert(6, "Beautiful ")
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'      Hello Beautiful World!

Remover

Você pode usar o método Remove para remover um número especificado de caracteres do objeto atual StringBuilder , começando em um índice baseado em zero especificado. O exemplo a seguir usa o método Remove para reduzir um StringBuilder objeto.

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Remove(5,7);
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Remove(5, 7)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello

Substitua

O método Replace pode ser usado para substituir caracteres dentro do StringBuilder objeto por outro caractere especificado. O exemplo a seguir usa o método Replace para pesquisar um StringBuilder objeto para todas as instâncias do caractere de ponto de exclamação (!) e substituí-las pelo caractere de ponto de interrogação (?).

StringBuilder myStringBuilder = new StringBuilder("Hello World!");
myStringBuilder.Replace('!', '?');
Console.WriteLine(myStringBuilder);
// The example displays the following output:
//       Hello World?
Dim myStringBuilder As New StringBuilder("Hello World!")
myStringBuilder.Replace("!"c, "?"c)
Console.WriteLine(myStringBuilder)
' The example displays the following output:
'       Hello World?

Convertendo um objeto StringBuilder em uma cadeia de caracteres

Você deve converter o StringBuilder objeto em um String objeto antes de passar a cadeia de caracteres representada pelo StringBuilder objeto para um método que tenha um String parâmetro ou exibi-lo na interface do usuário. Você faz essa conversão chamando o StringBuilder.ToString método. O exemplo a seguir chama vários StringBuilder métodos e chama o StringBuilder.ToString() método para exibir a cadeia de caracteres.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb = new StringBuilder();
      bool flag = true;
      string[] spellings = { "recieve", "receeve", "receive" };
      sb.AppendFormat("Which of the following spellings is {0}:", flag);
      sb.AppendLine();
      for (int ctr = 0; ctr <= spellings.GetUpperBound(0); ctr++) {
         sb.AppendFormat("   {0}. {1}", ctr, spellings[ctr]);
         sb.AppendLine();
      }
      sb.AppendLine();
      Console.WriteLine(sb.ToString());
   }
}
// The example displays the following output:
//       Which of the following spellings is True:
//          0. recieve
//          1. receeve
//          2. receive
Imports System.Text

Module Example
    Public Sub Main()
        Dim sb As New StringBuilder()
        Dim flag As Boolean = True
        Dim spellings() As String = {"recieve", "receeve", "receive"}
        sb.AppendFormat("Which of the following spellings is {0}:", flag)
        sb.AppendLine()
        For ctr As Integer = 0 To spellings.GetUpperBound(0)
            sb.AppendFormat("   {0}. {1}", ctr, spellings(ctr))
            sb.AppendLine()
        Next
        sb.AppendLine()
        Console.WriteLine(sb.ToString())
    End Sub
End Module
' The example displays the following output:
'       Which of the following spellings is True:
'          0. recieve
'          1. receeve
'          2. receive

Consulte também