segunda-feira, 19 de outubro de 2009

Programando em C#: Cadeia de Caracteres – a classe StringBuilder

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.



quarta-feira, 23 de setembro de 2009

Programando em C#: Cadeia de Caracteres – a classe String

Com a massificação dos computadores em todas as atividades do dia a dia é normal que nossos programas tenham que apresentar resultados de forma compreensível às pessoas. Normalmente isso é feito através de mensagens escritas, ou seja, seqüências de caracteres encadeados. Popularmente chamadas strings.

Algumas linguagens de programação têm as strings como tipos primitivos, o que não acontece no C#. Nesse caso, String é uma classe.

Você sabe o que é uma classe?

Classe é uma estrutura de dados que contêm informações e/ou executam funções.

Posteriormente, entraremos nos detalhes da dinâmica dos itens que compõem uma classe.

Existem diversas maneiras referenciar a uma string:

Descrevendo seu conteúdo entre aspas duplas (String Literal) ou utilizando o identificador do objeto especificado (referência string).

Exemplo:

String cadeia = new string();

String cadeia2 = "outra string";

String cadeia3 = "mais " + cadeia2;

String cadeia4 = new string("istringui");


 

Você também pode usar um vetor do tipo char para definir uma string:


 

Char[] cadeiaChar = new char[10];

cadeiaChar = {'f','r','e','e','s','t','y','l','e','s'};

String cadeia5 = new string(cadeiaChar, 0, 4);

Deste modo a string receberá a partir da posição 0, 4 caracteres do vetor definido acima. O resultado será a string "free".


 

String cadeia6 = new string('X', 6);

Deste modo a string receberá o caractere X 6 vezes. O resultado será uma string assim: "XXXXXX"

Uma vez criado a string, este (e qualquer outro, na verdade) objeto dispõe de várias propriedades e funcionalidades (também chamadas Métodos) que auxiliam no uso e manipulação do mesmo.

O uso dos métodos faz-se através da fórmula: nomedastring.metodo(argumento(s)).

Essa formula vem de um padrão de nomenclatura chamado notação em pontos. Nem todo método necessita de argumentos, nesse caso os parênteses aparecem vazios. Para usar as propriedades a sintaxe é string.propriedade.


 

Exemplo:

cadeia5.Length;

Essa propriedade informa o tamanho (a quantidade de caracteres) da string cadeia5. No exemplo, cadeia5.Length é igual a 5.

Outros métodos bastante usados da classe string:

Equals(string) (lê-se Íquous)

Compara as strings quanto ao conteúdo e retorna True caso sejam idênticas, ou False caso contrário.

CompareTo(string) (lê-se compérr chu)

Compara as strings quanto ao conteúdo e retorna 1 caso a string comparada seja "menor", -1 caso essa string seja "maior" e 0 caso as strings sejam idênticas.

StartsWith(string)

Retorna True caso a string inicia com a string especificada nos parênteses, False caso contrário.

EndsWith(string) 

Retorna True caso a string termina com a string especificada nos parênteses, False caso contrário.

IndexOf(char ou string, [int], [int])

Retorna o Índice da primeira ocorrência da string indicada no primeiro parâmetro, a partir da posição indicada pelo segundo argumento, o terceiro argumento indica quantas posições pesquisar após o inicio da pesquisa. Caso não haja ocorrência, retorna o valor -1.

IndexOfAny(char[] ou string[], [int], [int])

Retorna o Índice da primeira ocorrência de qualquer um dos elementos do vetor dado, a partir da posição [da string] indicada pelo segundo argumento, o terceiro argumento indica quantas posições pesquisar após o inicio da pesquisa. Caso não haja ocorrência, retorna o valor -1.

LastIndexOf(char ou String,[int] ,[int]) 

Retorna o Índice da última ocorrência da string indicada no primeiro parâmetro, a partir da posição indicada pelo segundo argumento, o terceiro argumento indica quantas posições pesquisar após o inicio da pesquisa. Caso não haja ocorrência, retorna o valor -1.

LastIndexOfAny(char[] ou string[], [int],[int]) 

Retorna o Índice da última ocorrência de qualquer um dos elementos do vetor dado, a partir da posição [da string] indicada pelo segundo argumento, o terceiro argumento indica quantas posições pesquisar após o inicio da pesquisa. Caso não haja ocorrência, retorna o valor -1.

Substring(int, [int]) (lê-se sâb string)

Retorna uma nova string resultante da leitura da string a partir do índice indicado no primeiro argumento, como número de caracteres indicado no segundo argumento. Caso não seja especificado, a substing seguirá até o fim da string original.

Concat(string, string) 

Une duas strings distintas gerando uma terceira. Não modifica as strings envolvidas.

ToLower () (lê-se chu láuer)

Passa os caracteres alfabéticos para a Caixa baixa.

ToUpper() (lê-se chu Ãpâr)

Passa os caracteres alfabéticos para a Caixa alta.

Replace(char, char) (lê-se rripleice)

Substitui caracteres entro da string.

Trim() 

Remove espaços brancos no início e no final de uma string

ToString() 

Retorna o conteúdo da string.


 

É bom lembrar que no caso dos métodos LastIndexOf e LastIndexOfAny usando 3 argumentos, o valor que representa início da pesquisa deve ser maior que o número que determinará o fim, tendo em vista que as pesquisas são iniciadas do fim para o começo da string.

Há muito mais sobre strings para se discutir, no próximo post continuaremos agora acerca da classe StringBuilder.


 

 

quarta-feira, 1 de julho de 2009

Aprimorando o inglês

Por Adriano

Quer aprimorar o inglês?
Acesse o site da BBC e comece agora:

http://www.bbc.co.uk/portuguese/learningenglish/


OK!!!