Alterar maiúsculas e minúsculas no .NET

Se você gravar um aplicativo que aceita a inserção de informações por um usuário, talvez você nunca tenha certeza se ele ou ela usará maiúsculas ou minúsculas para inserir os dados. Muitas vezes, você quer que as cadeias de caracteres tenham a grafia de maiúsculas e minúsculas consistente, especialmente se você estiver exibindo-as na interface do usuário. A tabela seguinte descreve três métodos de alteração de capitalização. Os primeiros dois métodos fornecem uma sobrecarga que aceita uma cultura.

Nome do método Use
String.ToUpper Converte todos os caracteres em uma cadeia de caracteres para maiúsculas.
String.ToLower Converte todos os caracteres em uma cadeia de caracteres para minúsculas.
TextInfo.ToTitleCase Converte uma cadeia de caracteres para capitalização de título.

Aviso

Os métodos String.ToUpper e String.ToLower não devem ser usados para converter cadeias de caracteres a fim de compará-las ou testá-las quanto à igualdade. Confira mais informações na seção Comparar cadeias de caracteres em maiúsculas e minúsculas.

Comparar cadeias de caracteres em maiúsculas e minúsculas

Para comparar cadeias de caracteres em maiúsculas e minúsculas e determinar a ordem delas, chame uma das sobrecargas do método String.CompareTo com um parâmetro comparisonType e forneça um valor de StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCase ou StringComparison.OrdinalIgnoreCase para o argumento comparisonType. Para fazer uma comparação usando uma cultura específica que não seja a atual, chame uma sobrecarga do método String.CompareTo com um parâmetro culture e um options e forneça um valor de CompareOptions.IgnoreCase como o argumento options.

Para comparar cadeias de caracteres em maiúsculas e minúsculas e determinar se são iguais, chame uma das sobrecargas do método String.Equals com um parâmetro comparisonType e forneça um valor de StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCase ou StringComparison.OrdinalIgnoreCase para o argumento comparisonType.

Para obter mais informações, consulte Práticas recomendadas para o uso de cadeias de caracteres.

Método ToUpper

O método String.ToUpper altera todos os caracteres em uma cadeia para maiúsculas. O exemplo a seguir converte a cadeia de caracteres "Olá, Mundo!" de maiúsculas e minúsculas misturadas.

string properString = "Hello World!";
Console.WriteLine(properString.ToUpper());
// This example displays the following output:
//       HELLO WORLD!
Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.ToUpper())
' This example displays the following output:
'       HELLO WORLD!

O exemplo anterior diferencia culturas por padrão e aplica as convenções de capitalização da cultura atual. Para realizar uma alteração de capitalização que não diferencia a cultura ou para aplicar as convenções de capitalização de uma cultura específica, use a sobrecarga do método String.ToUpper(CultureInfo) e forneça um valor de CultureInfo.InvariantCulture ou um objeto System.Globalization.CultureInfo que representa a cultura especificada para o parâmetro culture. Confira um exemplo que demonstra como usar o método ToUpper para realizar uma Alteração de capitalização que não diferencia a cultura.

Método ToLower

O método String.ToLower é semelhante ao anterior, porém ele converte todos os caracteres de uma cadeia para minúsculas. O exemplo a seguir converte a cadeia de caracteres "Hello, World!" para letras minúsculas.

string properString = "Hello World!";
Console.WriteLine(properString.ToLower());
// This example displays the following output:
//       hello world!
Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.ToLower())
' This example displays the following output:
'       hello world!

O exemplo anterior diferencia culturas por padrão e aplica as convenções de capitalização da cultura atual. Para realizar uma alteração de capitalização que não diferencia a cultura ou para aplicar as convenções de capitalização de uma cultura específica, use a sobrecarga do método String.ToLower(CultureInfo) e forneça um valor de CultureInfo.InvariantCulture ou um objeto System.Globalization.CultureInfo que representa a cultura especificada para o parâmetro culture. Confira um exemplo que demonstra como usar o método ToLower(CultureInfo) para realizar uma Alteração de capitalização que não diferencia a cultura.

Método ToTitleCase

O TextInfo.ToTitleCase converte o primeiro caractere de cada palavra em maiúscula e os restantes em minúsculas. No entanto, as palavras que são totalmente maiúsculas são consideradas acrônimos e não são convertidas.

O método TextInfo.ToTitleCase diferencia a cultura, ou seja, ele usa as convenções de capitalização de uma determinada cultura. Para chamar o método, é preciso antes recuperar o objeto TextInfo que representa as convenções de capitalização da cultura específica da propriedade CultureInfo.TextInfo de uma determinada cultura.

O exemplo a seguir passa todas as cadeias de caracteres de uma matriz para o método TextInfo.ToTitleCase. As cadeias de caracteres incluem cadeias de caracteres de títulos próprios assim como acrônimos. As cadeias de caracteres são convertidas para a capitalização de título usando as convenções de capitalização da cultura do inglês (Estados Unidos).

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { "a tale of two cities", "gROWL to the rescue",
                          "inside the US government", "sports and MLB baseball",
                          "The Return of Sherlock Holmes", "UNICEF and children"};

      TextInfo ti = CultureInfo.CurrentCulture.TextInfo;
      foreach (var value in values)
         Console.WriteLine("{0} --> {1}", value, ti.ToTitleCase(value));
   }
}
// The example displays the following output:
//    a tale of two cities --> A Tale Of Two Cities
//    gROWL to the rescue --> Growl To The Rescue
//    inside the US government --> Inside The US Government
//    sports and MLB baseball --> Sports And MLB Baseball
//    The Return of Sherlock Holmes --> The Return Of Sherlock Holmes
//    UNICEF and children --> UNICEF And Children
Imports System.Globalization

Module Example
    Public Sub Main()
        Dim values() As String = {"a tale of two cities", "gROWL to the rescue",
                                   "inside the US government", "sports and MLB baseball",
                                   "The Return of Sherlock Holmes", "UNICEF and children"}

        Dim ti As TextInfo = CultureInfo.CurrentCulture.TextInfo
        For Each value In values
            Console.WriteLine("{0} --> {1}", value, ti.ToTitleCase(value))
        Next
    End Sub
End Module
' The example displays the following output:
'    a tale of two cities --> A Tale Of Two Cities
'    gROWL to the rescue --> Growl To The Rescue
'    inside the US government --> Inside The US Government
'    sports and MLB baseball --> Sports And MLB Baseball
'    The Return of Sherlock Holmes --> The Return Of Sherlock Holmes
'    UNICEF and children --> UNICEF And Children

Embora diferencie a cultura, o método TextInfo.ToTitleCase não fornece regras linguisticamente corretas de capitalização. No exemplo anterior, o método converte "um conto de duas cidades" para "Um Conto De Duas Cidades". No entanto, a capitalização linguisticamente correta para a cultura en-US seria "Um Conto de Duas Cidades."

Confira também