C# - Convertendo Strings - Classe TextInfo


 Neste artigo eu vou mostrar como podemos converter uma cadeia de caracteres para maiúsculas/minúsculas (PacalCase, CamelCase e ProperCase) usando a classe TextInfo em um projeto Windows Forms usando a linguagem C#.

A classe String inclui um método que converte uma seqüência de caracteres para maiúsculas/minúsculas.

O método ToTitleCase reside na classe TextInfo , que é um membro do namespace System. Globalization.

Ao contrário de ToUpper e ToLower, métodos da classe String , o método ToTitleCase não é um método estático e requer uma instância da classe.

Quando você usa a classe TextInfo, você deve especificar informações culturais. Na maioria das situações, a cultura padrão está em uso no momento.

Informações de cultura são uma propriedade da thread no qual o código está sendo executado. Para obter as informações de cultura, você deve acessar o segmento atual e recuperar a propriedade CurrentCulture do thread. Depois de fazer isso, você pode criar o objeto TextInfo. Por exemplo:

CultureInfo cultureInfo   = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;

A classe TextInfo também inclui os métodos ToUpper e ToLower . Use estes métodos de TextInfo se você precisar especificar opções de cultura.

    Console.WriteLine(textInfo.ToTitleCase(texto));
    Console.WriteLine(textInfo.ToLower(texto));
    Console.WriteLine(textInfo.ToUpper(texto));

Se você precisar criar ou manipular cadeias de caracteres que têm configurações de cultura específica, você pode usar um dos construtores sobrecarregados da classe TextInfo para criar seqüências de caracteres com qualquer uma das opções disponíveis de cultura.

Nota: Quando você usa o namespace de globalização para converter os dados, se você armazenar os dados convertidos em vez de exibi-la para o usuário, convém usar a propriedade InvariantCulture da classe CultureInfo .

Neste artigo eu vou usar os métodos da classe TextInfo e criar métodos de extensão para converter cadeias de caractere para CamelCase, PascalCase e ProperCase.

1 - CamelCase

CamelCase é a denominação em inglês para a prática de escrever palavras compostas ou frases, onde cada palavra é iniciada com Maiúsculas e unidas sem espaços.

É um padrão largamente utilizado em diversas linguagens de programação, como Java, Ruby, PHP e Python, principalmente nas definições de Classes e Objetos.

Pela sua associação com tecnologia, o marketing se apropriou dessa maneira de escrever, injetando certo ar de "tecnologia" nos produtos assim nomeados: iPod, GameCube, OpenOffice.org, StarCraft, dentre outros.

2- PascalCase

Poe o primeiro caractere em caixa alta e adiciona um espaço antes de cada letra em caixa alta (exceto o primeiro caractere).

3- ProperCase

Cada primeira letra da cadeia de caracteres é colocada em caixa alta.

Neste artigo iremos criar métodos de extensão usando a classe TextInfo para realizar a conversão.

O que são os Métodos de extensão (Extension Methods) ?

Uma das funcionalidades implementadas na nova versão da plataforma .NET ( versão 3.5) são os métodos de extensão eles permitem ampliar a funcionalidade já existente em uma classe ou tipo. Para dar suporte ao LINQ foi necessário adicionar novos métodos em classes/tipos já existentes sem usar o recurso da herança ou ter que recompilar a classe/tipo original.

Isso foi necessário pois muitas classes/tipos não permitiam a modificação por meio da herança e além disso teriam que continuar compatíveis com as versões anteriores.

Recursos usados :

Criando o projeto no VS 2013

Abra o VS Express 2013 for Windows Desktop e clique em New Project;

A seguir selecione a linguagem Visual C# e o template Console Application;

Informe o nome Convertendo_Strings e clique no botão OK;

A seguir no  meu PROJECT clique em Add Class e informe o nome Converter definindo o código conforme abaixo:

using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Threading;
namespace Convertendo_Strings
{
    public static class Converter
    {
        // Converte a string para Pascal case.
        public static string ToPascalCase(this string texto)
        {
            TextInfo info = Thread.CurrentThread.CurrentCulture.TextInfo;
            texto = info.ToTitleCase(texto);
            string[] partes = texto.Split(new char[] { },StringSplitOptions.RemoveEmptyEntries);
            string resultado = String.Join(String.Empty, partes);
            return resultado;
        }
        // Converte a string para camel case
        public static string ToCamelCase(this string texto)
        {
            texto = texto.ToPascalCase();
            return texto.Substring(0, 1).ToLower() + texto.Substring(1);
        }
        // Poe o primeiro caractere em caixa alta e adiciona um espaco
        // antes de cada letra em caixa alta (exceto o primeiro caractere).
        public static string ToProperCase(this string texto)
        {
            const string pattern = @"(?<=\w)(?=[A-Z])";
            string resultado = Regex.Replace(texto, pattern," ", RegexOptions.None);
            return resultado.Substring(0, 1).ToUpper() + resultado.Substring(1);
        }
    }
}

A título de curiosidade veja como ficaria o método ToPascalCase usando a programação tradicional:

  public static string ToPascalCaseMetodoTradicional(string texto)
  {
            // Se existem  0 ou 1 caracteres, apenas retorna a string
            if (texto == null) return texto;
            if (texto.Length < 2) return texto.ToUpper();
            // Divide a string em palavras
            string[] palavras = texto.Split(
                new char[] { },
                StringSplitOptions.RemoveEmptyEntries);
            // Combina as palavras 
            string resultado = "";
            foreach (string palavra in palavras)
            {
                resultado +=
                    palavra.Substring(0, 1).ToUpper() +
                    palavra.Substring(1);
            }
            return resultado;
  }

Note que usando a classe TextInfo economizamos linhas de código.

A seguir inclua a partir da ToolBox no formulário form1.vb os seguintes controles:

Disponha os controles no formulário conforme o leiaute da figura abaixo:

Agora vamos definir em cada evento Click dos botões de comando o código para converter a cadeia de caracteres informada na caixa de texto txtTexto:

1- Evento Click do botão Pacal Case

 private void btnPascalCase_Click(object sender, EventArgs e)
 {
            if (!string.IsNullOrEmpty(txtTexto.Text))
            {
                txtPascalCase.Text = Converter.ToPascalCase(txtTexto.Text);
            }
            else
            {
                MessageBox.Show("Informe o texto para conversão", "Informe o Texto", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
 }

1- Evento Click do botão Camel Case

 private void btnCamelCase_Click(object sender, EventArgs e)
 {
            if (!string.IsNullOrEmpty(txtTexto.Text))
            {
               txtCamelCase.Text = Converter.ToCamelCase(txtTexto.Text);
            }
            else
            {
                MessageBox.Show("Informe o texto para conversão", "Informe o Texto", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
 }

1- Evento Click do botão Proper Case

 private void btnProperCase_Click(object sender, EventArgs e)
 {
            if (!string.IsNullOrEmpty(txtTexto.Text))
            {
                txtProperCase.Text = Converter.ToProperCase(txtTexto.Text);
            }
            else
            {
                MessageBox.Show("Informe o texto para conversão", "Informe o Texto", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
 }

1- Evento Click do botão Sair

private void btnSair_Click(object sender, EventArgs e)
{
   this.Close();
}

Executando o projeto iremos obter o seguinte resultado:



Pegue o exemplo do projeto aqui:  
Convertendo_Strings.zip

Porque os judeus pedem sinal, e os gregos buscam sabedoria;
Mas nós pregamos a Cristo crucificado, que é escândalo para os judeus, e loucura para os gregos.
Mas para os que são chamados, tanto judeus como gregos, lhes pregamos a Cristo, poder de Deus, e sabedoria de Deus.
1 Coríntios 1:22-24

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?


             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti