C# - Trabalhando com Strings (revisão)


Neste artigo irei mostrar novamente como podemos realizar operações básicas com Strings usando os recursos da linguagem C#.

Irei tratar alguns tópicos mais comuns onde vou dar uma abordagem mais prática dando uma breve explanação teórica quando necessário.

Em todos os exemplos do artigo eu estou usando o Visual C# 2010 Express Edition em um projeto do tipo Windows Forms Application com o nome TratandoStrings.

1- Convertendo texto para o formato binário e vice-versa

O namespace System.Text define um número de classes que ajudam a trabalhar com dados textuais. Para converter de/e para bytes, podemos usar a classe Encoding.

Embora seja possível criar um esquema de codificação de texto próprio, normalmente você vai usar um dos membros estáticos pré-criados da classe Enconding, que representam os mais comuns padrões de codificação, como ASCII, Unicode, UTF-8 e assim por diante.

No formulário form1.cs do projeto inclua 4 caixas de Texto (Multiline=True) e 4 botões de comando conforme o leiaute abaixo:

No início do formulário temos que declarar os namespaces System.Text

A seguir vamos declarar a variáveis : byte[] bytes1,bytes2,bytes3;

No evento Click do botão de comando Converter para Bytes inclua o código abaixo:

private void btnBytes_Click(object sender, EventArgs e)
        {
            try
            {
                bytes1 = Encoding.ASCII.GetBytes(txtTexto.Text);
                bytes2 = Encoding.Unicode.GetBytes(txtTexto.Text);
                bytes3 = Encoding.UTF8.GetBytes(txtTexto.Text);
                txtBytes.Text = BitConverter.ToString(bytes1);
                txtUnicode.Text = BitConverter.ToString(bytes2);
                txtUTF8.Text = BitConverter.ToString(bytes3);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro : " + ex.Message);
            }
        }

No código estamos usando a classe Encoding e o tipo de codificação (ASCII, Unicode, UTF8) e o método GetBytes passando o texto que desejamos converter para bytes.

O resultado obtido é exibido abaixo:

Para converter de bytes para Texto podemos usar o método GetString da classe Encoding;

O código usado em cada evento Click dos botões para converter para texto é o seguinte:

- ASCII

string resultado1 = Encoding.ASCII.GetString(bytes1);
txtTexto.Text = resultado1;

- Unicode

string resultado2 = Encoding.Unicode.GetString(bytes2);
txtTexto.Text = resultado2;

- UTF8

string resultado3 = Encoding.UTF8.GetString(bytes3);
txtTexto.Text = resultado3;

Lembrando que na plataforma .NET todas as strings são Unicode e você deve se preocupar com a representação dos bytes quando estiver escrevendo strings para arquivos, redes, banco de dados e localizações externas.

2- Detectando strings vazias

Quando estiver tratando com strings você tem que estar atento aos possíveis 4 estados de uma string:

  1. A string é null;
  2. A string é empty(vazia);
  3. A string não contém nada apenas espaço em branco;
  4. A string possui um conteúdo;

Como podemos tratar isso ?

As condições 1 e 2 podem ser tratadas usando o método IsNullOrEmpty() da classe string.

Ex: String.IsNullOrEmpty(resultado1);

IsNullOrEmpty Indica se a String especificada é uma referência nula (Nothing no Visual Basic) ou uma string Empty (vazia).

A partir da versão 4.0 a plataforma .NET introduziu o método IsNullOrWhiteSpace(), assim poderíamos tratar a condição 1 e 3.

Ex: String.IsNullOrWhiteSpace(resultado1);

IsNullOrWhiteSpace Indica se uma seqüência especificada é Nada, vazia, ou consiste apenas de caracteres espaço em branco.(os whitespaces são caracteres que não são exibidos graficamente, como por exemplo, a tabulação, o espaço em branco e a quebra de linha)

Então podemos ter:

1- Verificar se a string contém conteúdo :Ex: bool StringTemConteudo = !String.IsNullOrWhiteSpace(resultado1);

2- Verificar se a string não contém conteúdo: Ex: bool StringNaoTemConteudo = String.IsNullOrWhiteSpace(resultado1);

3- Dividir um String

Dividir uma string em um array de strings, com base em delimitadores (caracteres ou strings que especificam onde as divisões deve ser feitas).

A classe String possui o método Split que podemos usar para dividir uma string em um array.

O método Split identifica substrings que são delimitados por um ou mais caracteres especificados em um array e então coloca as subtrings em um array de strings.

Portanto o método retorna um array de strings contendo substrings delimitadas por um caractere definido.

No menu File-> Add -> New Project inclua um projeto do tipo Windows Application com o nome DividindoStrings conforme o leiaute a seguir:

No evento Click do botão de comando inclua o código:

  private void btnDividir_Click(object sender, EventArgs e)
  {
            string original = txtTexto.Text;
            char[] delimitadores = new char[]{',','-',' ','.'};
            string[] strings =
original.Split(delimitadores);
            foreach (string s in strings)
            {
               txtResultado.Text +="\t" +  s;
            }
 }

Executando o projeto teremos:

Vejamos outro exemplo usando o método Split , desta vez vamos exibir o resultado em um controle ListBox para podermos visualizarmos melhor a separação dos caracteres. Vamos também definir um único caractere como delimitador e usar o laço for.

Inclua um novo botão de comando no formulário com o nome - btnSplit e texto - Usando Split. Inclua também um controle ListBox com o nome lstResultado conforme o leiaute abaixo:

Agora inclua no evento Click do botão de comando o código abaixo:

   private void btnSplit_Click(object sender, EventArgs e)
   {
            string[] strArray = null;
            char[] splitchar = { ' ' };

            strArray = txtTexto.Text.Split(splitchar);

            for (int i = 0; i <= strArray.Length - 1; i++)
            {
                lstResultado.Items.Add("\t" + strArray[i]);
            }
   }

Executando o projeto temos ao lado a figura exibindo o resultado.

Pegue a solução completa aqui: TratandoStrings.zip

1Ts 2:5 Pois, nunca usamos de palavras lisonjeiras, como sabeis, nem agimos com intuitos gananciosos. Deus é testemunha,

1Ts 2:6 nem buscamos glória de homens, quer de vós, quer de outros, embora pudéssemos, como apóstolos de Cristo, ser-vos pesados;

1Ts 2:7 antes nos apresentamos brandos entre vós, qual ama que acaricia seus próprios filhos.

Referências:


José Carlos Macoratti