Programando em C#: Cadeia de Caracteres – a classe StringBuilder
Autor: César A. Marques | Publicado: 2009-10-19T12:46:00-07:00

A classe String proporciona muitas funcionalidades para auxiliar no processamento de cadeias de caracteres. Entretanto uma vez criada, o conteúdo de um objeto da classe string não pode ser alterado. Quando alteramos uma string atribuindo um novo valor, isso gera uma nova string para qual a referência do objeto anterior apontará a partir de então. As funcionalidades explicadas aqui se referem à classe StringBuilder, usada para criar cadeias de caracteres dinâmicas, ou seja, strings capazes de mudar seu conteúdo. Um objeto dessa classe pode armazenar um número específico de caracteres se esse número for extrapolado, um novo limite é estipulado para comportar os novos caracteres.  Existem 6 maneiras diferentes de criar um objeto Stringbuilder, vejamos os 3 mais usados:StringBuilder()Cria um StringBuilder sem caracteres contidos, por padrão o tamanho máximo inicial é de 16 caracteres.StringBuilder(int)Cria um StringBuilder com um tamanho máximo específico, representado pelo int nos parênteses.StringBuilder(string)Cria um StringBuilder contendo a string especificada como parâmetro, O tamanho máximo inicial é igual a menor potência de dois maior que o número total de caracteres do parâmetro dado. Ex: se a string dada for "ato"então o tamanho máximo será de 8 caracteres, pois 2³ = 8.Esta classe tem duas propriedades importantes, a Length e a Capacity que representam o tamanho atual do conteúdo e o valor do tamanho máximo de uma instância. StringBuilder SBTeste = new StringBuilder("ato"); Essa linha gera uma instância de StringBuilder chamada SBTeste com as seguintes propriedades, dentre outras: Length = 4; Capacity = 8. Caso desejemos aumentar a capacidade máxima de nosso objeto SBTeste, devemos usar o método EnsureCapacity(int)onde o parâmetro deve representar o número de caracteres que queremos assegurar. O tamanho máximo será acrescido da seguinte forma: caso o número especificado seja menor que o dobro do tamanho atual, o novo tamanho máximo será o número + 1, caso contrário, será o dobro do tamanho atual. Usando o exemplo anterior: SBTeste.EnsureCapacity(10); Após esse comando as propriedades anteriormente citadas ficam assim: Length = 4; Capacity = 11. Também podemos alterar diretamente a propriedade Length: SBTeste.Length(3); Após esse comando, eis os valores das propriedades: Length = 3; Capacity = 11; Conteúdo de SBTeste = "at" Para explorar a principal característica dessa classe, usa-se os métodos Append e AppendFormat que permitem se adicione conteúdo a cadeia de caracteres de um StringBuilder. O método Append comporta qualquer dos tipos primitivos, vetor tipo ‘har’além das classes String e Object como parâmetro. O método AppendFormat adiciona conteúdo a cadeia de caracteres usando um formato especificado, usando a seguinte sintaxe: Instância.AppendFormat(stringDeFormato, string); A string de formato é uma string que contém informação especial, usando uma notação que determina como a string será exibida. Essa informação é apresentada entre chaves, e usa a seguinte estrutura: {X[,Y][:stringDeFormato]}, onde X é o número do argumento a ser formatado (caso venha a ser mais de um, a lista inicia do zero) Y é um número opcional que indica quantos dígitos devem ser exibidos, esse número pode ser positivo ou negativo. Caso o número tenha menos dígitos que o explicitado por Y, o número será seguido de espaços, se o Y for positivo ou precedido de espaços, caso Y for negativo. O stringDeFormato fornece um formato específico para o número correspondente ao X pode ser tipo moeda, decimal, científico entre muitos outros. Um StringBuilder possibilita inserir caracteres em qualquer posição da cadeia de caracteres através do método Insert que aceita os mesmos tipos de dados que os métodos Append, desde que antecedidos por um número inteiro que indica a posição (devendo ficar entre 0 ou mais e menos que o comprimento total da cadeia de caracteres.) onde deverá ser inserido o valor conseqüente. Ex.: //valor anterior: "at" SBTeste.Insert(2, "alo"); //valor atual: "aialot" É também possível remover caracteres livremente da cadeia de caracteres de um StringBuilder com o método Remove informando a posição de onde a remoção deve começar (onde o início da cadeia de caracteres é 0) a quantidade de caracteres que deve ser retirada a seguir. //valor anterior: "aialot" SBTeste.Remove(4, 3); //valor atual: "aia" Outra possibilidade interessante é a substituição de porções da cadeia de caracteres através do método Replace informando a parte qual se quer substituir e pelo que: //valor anterior: "aia" SBTeste.Remove("a", "aiada"); //valor atual: "gataiada" Faremos uma pequena pausa no assunto Cadeia de Caracteres (Strings) para fazer algumas considerações mais básicas, necessárias para o melhor entendimento de explicações futuras, e então retomaremos falando da estrutura (struct) Char e de expressões regulares.