Compartir vía


Comparación de cadenas en .NET

.NET proporciona varios métodos para comparar los valores de cadenas. En la tabla siguiente se enumeran y describen los métodos de comparación de valores.

Nombre del método Usar
String.Compare Compara los valores de dos cadenas. Devuelve un valor entero.
String.CompareOrdinal Compara dos cadenas independientemente de la referencia cultural local. Devuelve un valor entero.
String.CompareTo Compara el objeto de cadena actual con otra cadena. Devuelve un valor entero.
String.StartsWith Determina si una cadena comienza con la cadena que se pasa. Devuelve un valor booleano.
String.EndsWith Determina si una cadena termina con la cadena que se pasa. Devuelve un valor booleano.
String.Contains Determina si un carácter o una cadena aparece dentro de otra cadena. Devuelve un valor booleano.
String.Equals Determina si dos cadenas son iguales. Devuelve un valor booleano.
String.IndexOf Devuelve la posición de índice de un carácter o cadena, empezando en el comienzo de la cadena que se examina. Devuelve un valor entero.
String.LastIndexOf Devuelve la posición de índice de un carácter o cadena, empezando en el final de la cadena que se examina. Devuelve un valor entero.

Método Compare

El método String.Compare estático proporciona una manera de comparar dos cadenas exhaustivamente. En este método se tiene en cuenta la referencia cultural. Esta función se puede usar para comparar dos cadenas o subcadenas de dos cadenas. Además, se proporcionan sobrecargas para tener en cuenta o no las diferencias de referencia cultural y de mayúsculas y minúsculas. En la tabla siguiente, se muestran los tres valores enteros que este método puede devolver.

Valor devuelto Condición
Un entero negativo La primera cadena precede a la segunda cadena en el criterio de ordenación.

o bien

La primera cadena es null.
0 La primera y la segunda cadena son iguales.

o bien

Ambas cadenas son null.
Un entero positivo.

o bien

1
La primera cadena sigue a la segunda cadena en el criterio de ordenación.

o bien

La segunda cadena es null.

Importante

La finalidad principal del método String.Compare es que se utilice para la ordenación o clasificación de cadenas. El método String.Compare no debe utilizarse para comprobar la igualdad (es decir, para buscar explícitamente un valor devuelto que sea 0 sin tener en cuenta si una cadena es menor o mayor que otra). En su lugar, para determinar si dos cadenas son iguales, use el método String.Equals(String, String, StringComparison) .

En el ejemplo siguiente, se usa el método String.Compare para determinar los valores relativos de dos cadenas.

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?"))

Con este ejemplo se muestra -1 en la consola.

En el ejemplo anterior se tienen en cuenta las referencias culturales de forma predeterminada. Para realizar una comparación de cadenas que no tenga en cuenta las referencias culturales, utilice una sobrecarga del método String.Compare ya que permite especificar la referencia cultural que se debe utilizar mediante un parámetro de referencia cultural . Para un ejemplo que muestra cómo usar el método String.Compare para realizar una comparación de este tipo, consulte Realizar comparaciones de cadenas que no tienen en cuenta las referencias culturales.

Método CompareOrdinal

El método String.CompareOrdinal compara dos objetos de cadena sin tener en cuenta la referencia cultural local. Los valores devueltos de este método son idénticos a los que devolvía el método Compare en la tabla anterior.

Importante

La finalidad principal del método String.CompareOrdinal es que se utilice para la ordenación o clasificación de cadenas. El método String.CompareOrdinal no debe utilizarse para comprobar la igualdad (es decir, para buscar explícitamente un valor devuelto que sea 0 sin tener en cuenta si una cadena es menor o mayor que otra). En su lugar, para determinar si dos cadenas son iguales, use el método String.Equals(String, String, StringComparison) .

En el ejemplo siguiente, se usa el método CompareOrdinal para comparar los valores de dos cadenas.

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!"))

Con este ejemplo se muestra -32 en la consola.

Método CompareTo

El método String.CompareTo compara la cadena que encapsula el objeto de cadena actual con otra cadena u objeto. Los valores devueltos de este método son idénticos a los que devolvía el método String.Compare en la tabla anterior.

Importante

La finalidad principal del método String.CompareTo es que se utilice para la ordenación o clasificación de cadenas. El método String.CompareTo no debe utilizarse para comprobar la igualdad (es decir, para buscar explícitamente un valor devuelto que sea 0 sin tener en cuenta si una cadena es menor o mayor que otra). En su lugar, para determinar si dos cadenas son iguales, use el método String.Equals(String, String, StringComparison) .

En el ejemplo siguiente se usa el método String.CompareTo para comparar los objetos string1 y 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)

Con este ejemplo se muestra -1 en la consola.

Todas las sobrecargas del método String.CompareTo realizan comparaciones que tienen en cuenta las referencias culturales y las mayúsculas y minúsculas de manera predeterminada. No se proporcionan sobrecargas de este método que permitan realizar una comparación que no tenga en cuenta las referencias culturales Para lograr claridad en el código, se recomienda utilizar el método String.Compare en su lugar, especificando CultureInfo.CurrentCulture para las operaciones que tienen en cuenta la referencia cultural o CultureInfo.InvariantCulture para las operaciones que no la tienen en cuenta. Para obtener ejemplos que muestran cómo utilizar el método String.Compare para realizar comparaciones de este tipo, vea Realizar comparaciones de cadenas que no tienen en cuenta las referencias culturales.

Método Equals

El método String.Equals puede determinar con facilidad si dos cadenas son iguales. Este método distingue entre mayúsculas y minúsculas y devuelve un valor booleano true o false. Se puede usar desde una clase existente, como se muestra en el siguiente ejemplo. En el ejemplo siguiente, se usa el método Equals para determinar si un objeto de cadena contiene la 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"))

Con este ejemplo se muestra True en la consola.

Este método se puede usar también como método estático. En el ejemplo siguiente se comparan dos objetos de cadena utilizando un 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))

Con este ejemplo se muestra True en la consola.

Métodos StartsWith y EndsWith

El método String.StartsWith se puede usar para determinar si un objeto de cadena comienza con los mismos caracteres que forman otra cadena. Este método distingue entre mayúsculas y minúsculas y devuelve true si el objeto de cadena actual comienza con la cadena que se pasa y false si no lo hace. En el ejemplo siguiente se usa este método para determinar si un objeto de cadena comienza con "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"))

Con este ejemplo se muestra True en la consola.

El método String.EndsWith compara la cadena que se pasa con los caracteres del final del objeto de cadena actual. También devuelve un valor booleano. En el ejemplo siguiente, se comprueba el final de una cadena con el 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"))

Con este ejemplo se muestra False en la consola.

Métodos IndexOf y LastIndexOf

El método String.IndexOf se puede usar para determinar la posición de la primera aparición de un carácter concreto dentro de una cadena. Este método, que distingue entre mayúsculas y minúsculas, empieza a contar desde el comienzo de una cadena y devuelve la posición del carácter que se pasa utilizando un índice de base cero. Si no encuentra el carácter, se devuelve un valor de –1.

En el ejemplo siguiente, se usa el método IndexOf para buscar la primera aparición del carácter "l" en una cadena.

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"))

Con este ejemplo se muestra 2 en la consola.

El método String.LastIndexOf es parecido al método String.IndexOf, con la diferencia de que devuelve la posición de la última instancia de un carácter concreto en una cadena. Distingue mayúsculas y minúsculas y utiliza un índice de base cero.

En el ejemplo siguiente, se usa el método LastIndexOf para buscar la última aparición del carácter "l" en una cadena.

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"))

Con este ejemplo se muestra 9 en la consola.

Los dos métodos resultan útiles si se usan junto con el método String.Remove . Se pueden usar los métodos IndexOf o LastIndexOf para recuperar la posición de un carácter y, a continuación, proporcionar esa posición al método Remove para quitar un carácter o una palabra que comience por ese carácter.

Vea también