Comparar cadeias de caracteres no .NET

O .NET fornece vários métodos para comparar os valores de cadeias de caracteres. A tabela a seguir lista e descreve os métodos de comparação de valores.

Nome do método Use
String.Compare Compara os valores das duas cadeias de caracteres. Retorna um valor inteiro.
String.CompareOrdinal Compara duas cadeias de caracteres sem considerar a cultura local. Retorna um valor inteiro.
String.CompareTo Compara o objeto atual de cadeia de caracteres a outra cadeia de caracteres. Retorna um valor inteiro.
String.StartsWith Determina se uma cadeia de caracteres começa com a cadeia de caracteres passada. Retorna um valor booliano.
String.EndsWith Determina se uma cadeia de caracteres termina com a cadeia de caracteres passada. Retorna um valor booliano.
String.Contains Determina se um caractere ou cadeia de caracteres ocorre dentro de outra cadeia de caracteres. Retorna um valor booliano.
String.Equals Determina se duas cadeias de caracteres são iguais. Retorna um valor booliano.
String.IndexOf Retorna a posição do índice de um caractere ou uma cadeia de caracteres, começando do início da cadeia de caracteres que você está examinando. Retorna um valor inteiro.
String.LastIndexOf Retorna a posição do índice de um caractere ou uma cadeia de caracteres, começando do fim da cadeia de caracteres que você está examinando. Retorna um valor inteiro.

Método Compare

O método estático String.Compare fornece uma maneira completa de comparar duas cadeias de caracteres. Esse método é cultural. Você pode usar essa função para comparar duas cadeias de caracteres ou subcadeias de duas cadeias de caracteres. Além disso, sobrecargas são fornecidas para considerar ou ignorar a variação cultural ou de caso. A tabela a seguir mostra os três valores inteiros que esse método pode retornar.

Valor retornado Condição
Um inteiro negativo A primeira cadeia de caracteres precede a segunda cadeia de caracteres na ordem de classificação.

-ou-

A primeira cadeia de caracteres é null.
0 A primeira cadeia de caracteres e a segunda cadeia de caracteres são iguais.

-ou-

Ambas as cadeias de caracteres são null.
Um inteiro positivo

-ou-

1
A primeira cadeia de caracteres segue a segunda cadeia de caracteres na ordem de classificação.

-ou-

A segunda cadeia de caracteres é null.

Importante

O método String.Compare destina-se principalmente para uso em ordenação ou classificação de cadeias de caracteres. Você não deve usar o método String.Compare para testar a igualdade (ou seja, para procurar explicitamente um valor retornado de 0 sem considerar se uma cadeia de caracteres é menor que ou maior que a outra). Em vez disso, para determinar se duas cadeias de caracteres são iguais, use o método String.Equals(String, String, StringComparison).

O exemplo a seguir usa o método String.Compare para determinar os valores relativos das duas cadeias de caracteres.

String^ string1 = "Hello World!";
Console::WriteLine(String::Compare(string1, "Hello World?"));
string string1 = "Hello World!";
Console.WriteLine(String.Compare(string1, "Hello World?"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.Compare(string1, "Hello World?"))

Este exemplo exibe -1 no console.

O exemplo anterior diferencia a cultura por padrão. Para realizar uma comparação de cadeia de caracteres que não diferencia a cultura, use uma sobrecarga do método String.Compare que permite que você especifique a cultura a ser usada, fornecendo um parâmetro culture. Confira um exemplo que demonstra como usar o método String.Compare para realizar uma comparação de cadeia de caracteres que não fazem distinção entre culturas em Comparações de cadeias de caracteres que não fazem distinção entre culturas.

Método CompareOrdinal

O método String.CompareOrdinal compara dois objetos de cadeia de caracteres sem considerar a cultura local. Os valores de retorno desse método são idênticos aos valores retornados pelo método Compare na tabela anterior.

Importante

O método String.CompareOrdinal destina-se principalmente para uso em ordenação ou classificação de cadeias de caracteres. Você não deve usar o método String.CompareOrdinal para testar a igualdade (ou seja, para procurar explicitamente um valor retornado de 0 sem considerar se uma cadeia de caracteres é menor que ou maior que a outra). Em vez disso, para determinar se duas cadeias de caracteres são iguais, use o método String.Equals(String, String, StringComparison).

O exemplo a seguir usa o método CompareOrdinal para comparar os valores de duas cadeias de caracteres.

String^ string1 = "Hello World!";
Console::WriteLine(String::CompareOrdinal(string1, "hello world!"));
string string1 = "Hello World!";
Console.WriteLine(String.CompareOrdinal(string1, "hello world!"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.CompareOrdinal(string1, "hello world!"))

Este exemplo exibe -32 no console.

Método CompareTo

O método String.CompareTo compara a cadeia de caracteres que o objeto atual de cadeia de caracteres encapsula com outro objeto ou cadeia de caracteres. Os valores de retorno desse método são idênticos aos valores retornados pelo método String.Compare na tabela anterior.

Importante

O método String.CompareTo destina-se principalmente para uso em ordenação ou classificação de cadeias de caracteres. Você não deve usar o método String.CompareTo para testar a igualdade (ou seja, para procurar explicitamente um valor retornado de 0 sem considerar se uma cadeia de caracteres é menor que ou maior que a outra). Em vez disso, para determinar se duas cadeias de caracteres são iguais, use o método String.Equals(String, String, StringComparison).

O exemplo a seguir usa o método String.CompareTo para comparar o objeto string1 ao objeto string2.

String^ string1 = "Hello World";
String^ string2 = "Hello World!";
int MyInt = string1->CompareTo(string2);
Console::WriteLine( MyInt );
string string1 = "Hello World";
string string2 = "Hello World!";
int MyInt = string1.CompareTo(string2);
Console.WriteLine( MyInt );
Dim string1 As String = "Hello World"
Dim string2 As String = "Hello World!"
Dim MyInt As Integer = string1.CompareTo(string2)
Console.WriteLine(MyInt)

Este exemplo exibe -1 no console.

Todas as sobrecargas do método String.CompareTo executam comparações que diferenciam a cultura e com diferenciação de maiúsculas e minúsculas por padrão. Nenhuma sobrecarga desse método é fornecida que permite que você execute uma comparação sem diferenciação de cultura. Em vez disso, para ter maior clareza do código, é recomendável usar o método String.Compare, especificando CultureInfo.CurrentCulture para operações que fazem distinção entre culturas ou CultureInfo.InvariantCulture para operações que não fazem distinção entre culturas. Confira exemplos que demonstram como usar o método String.Compare para realizar comparações de cadeia de caracteres que fazem e não fazem distinção entre culturas em Executar comparações de cadeias de caracteres que não fazem distinção entre culturas.

Método Equals

O método String.Equals pode facilmente determinar se duas cadeias de caracteres são as mesmas. Esse método que diferencia maiúsculas de minúsculas retorna um valor Booliano true ou false. Ele pode ser usado de uma classe existente, conforme ilustrado no exemplo a seguir. O exemplo a seguir usa o método Equals para determinar se um objeto de cadeia de caracteres contém a frase "Hello World".

String^ string1 = "Hello World";
Console::WriteLine(string1->Equals("Hello World"));
string string1 = "Hello World";
Console.WriteLine(string1.Equals("Hello World"));
Dim string1 As String = "Hello World"
Console.WriteLine(string1.Equals("Hello World"))

Este exemplo exibe True no console.

Esse método também pode ser usado como um método estático. O exemplo a seguir compara dois objetos de cadeia de caracteres usando um método estático.

String^ string1 = "Hello World";
String^ string2 = "Hello World";
Console::WriteLine(String::Equals(string1, string2));
string string1 = "Hello World";
string string2 = "Hello World";
Console.WriteLine(String.Equals(string1, string2));
Dim string1 As String = "Hello World"
Dim string2 As String = "Hello World"
Console.WriteLine(String.Equals(string1, string2))

Este exemplo exibe True no console.

Métodos StartsWith e EndsWith

Você pode usar o método String.StartsWith para determinar se um objeto de cadeia de caracteres começa com os mesmos caracteres que englobam outra cadeia de caracteres. Esse método que diferencia maiúsculas de minúsculas retorna true se o objeto atual de cadeia de caracteres começa com a cadeia de caracteres passada e false se não existir. O exemplo a seguir usa esse método para determinar se um objeto de cadeia de caracteres começa com "Hello".

String^ string1 = "Hello World";
Console::WriteLine(string1->StartsWith("Hello"));
string string1 = "Hello World";
Console.WriteLine(string1.StartsWith("Hello"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.StartsWith("Hello"))

Este exemplo exibe True no console.

O método String.EndsWith compara uma cadeia de caracteres passada com os caracteres que existem no final do objeto de cadeia de caracteres atual. Ele também retorna um valor Booliano. O exemplo a seguir verifica o fim de uma cadeia de caracteres usando o método EndsWith.

String^ string1 = "Hello World";
Console::WriteLine(string1->EndsWith("Hello"));
string string1 = "Hello World";
Console.WriteLine(string1.EndsWith("Hello"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.EndsWith("Hello"))

Este exemplo exibe False no console.

Métodos IndexOf e LastIndexOf

É possível o método String.IndexOf para determinar a posição da primeira ocorrência de um determinado caractere dentro de uma cadeia de caracteres. Esse método que diferencia maiúsculas de minúsculas inicia a contagem do início de uma cadeia de caracteres e retorna a posição de um caractere passado usando um índice baseado em zero. Se o caractere não for encontrado, um valor de -1 será retornado.

O exemplo a seguir usa o método IndexOf para pesquisar a primeira ocorrência do caractere 'l' em uma cadeia de caracteres.

String^ string1 = "Hello World";
Console::WriteLine(string1->IndexOf('l'));
string string1 = "Hello World";
Console.WriteLine(string1.IndexOf('l'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.IndexOf("l"))

Este exemplo exibe 2 no console.

O método String.LastIndexOf é semelhante ao método String.IndexOf, exceto que ele retorna a posição da última ocorrência de um determinado caractere dentro de uma cadeia de caracteres. Ele diferencia maiúsculas de minúsculas e usa um índice baseado em zero.

O exemplo a seguir usa o método LastIndexOf para pesquisar a última ocorrência do caractere 'l' em uma cadeia de caracteres.

String^ string1 = "Hello World";
Console::WriteLine(string1->LastIndexOf('l'));
string string1 = "Hello World";
Console.WriteLine(string1.LastIndexOf('l'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.LastIndexOf("l"))

Este exemplo exibe 9 no console.

Ambos os métodos são úteis quando usados em conjunto com o método String.Remove. Você pode usar tanto o método IndexOf quanto o LastIndexOf para recuperar a posição de um caractere e, em seguida, fornecer essa posição para o método Remove para remover um caractere ou uma palavra que comece com esse caractere.

Confira também