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
- Procedimientos recomendados para el uso de cadenas en .NET
- Operaciones básicas de cadenas
- Realizar operaciones de cadena que no distinguen entre referencias culturales
- Ordenación de tablas de peso, usada por .NET Framework y .NET Core 1.0 a 3.1 en Windows
- Tabla de elementos de intercalación predeterminada de Unicode, usada por .NET 5 en todas las plataformas y por .NET Core en Linux y macOS