¿Cómo comparar strings en C#?

Una string es una colección de caracteres y se utiliza para almacenar texto sin formato. A diferencia de C o C++, una string en C# no termina con un carácter nulo. El tamaño máximo de un objeto de string depende de la arquitectura interna del sistema. Una variable declarada seguida de «string» es en realidad un objeto de clase de string.

¿Cómo instanciar un objeto de string?

Podemos crear un objeto de clase de string usando el nombre de la variable seguido de la palabra clave «string». 

Sintaxis:

string miString;

También podemos inicializar un objeto de string en el momento de la declaración.

Sintaxis:

string myString = “GeeksForGeeks”;

Este artículo se centra en cómo podemos comparar strings en C#. Por ejemplo, se nos dan tres strings «GeeksforGeeks», «Geeks» y «GeeksforGeeks». Claramente, la primera y la última string son las mismas. Existen numerosas formas de comparar strings en C#, de las cuales se explican en detalle cinco formas a continuación.

Método 1: Usar el método String.Equals()

La clase String se especifica en la biblioteca de clases base de .NET. En otras palabras, un objeto String es una colección secuencial de objetos System.Char que representan una string. La clase System.String es inmutable, es decir, una vez creado su estado, no podemos realizar cambios en él. El método String.Equals() es un método de la clase String. Este método toma dos strings para comparar como parámetros. Devuelve un valor lógico, verdadero o falso, con cuya ayuda podemos determinar si las strings dadas son iguales o no. 

Sintaxis:

String.Equals(myString1, myString2)

Parámetros: Toma dos parámetros myString1: Primera string y myString2: Segunda string 

Tipo de retorno: el tipo de retorno de este método es booleano. Será verdadero si ambas strings son iguales y falso si ambas strings son diferentes

Ejemplo: 

C#

// C# program to illustrate the working of 
// String.Equals() method to compare two strings
using System;
  
class GFG{
      
static public void Main()
{
      
    // Initialize a string
    string myString1 = "GeeksforGeeks";  
      
    // Initialize another string
    string myString2 = "Geeks";
      
    // Initialize a string
    string myString3 = "GeeksforGeeks";
      
    // If this method returns true
    // Print both string are same
    if (String.Equals(myString1, myString2))  
        Console.WriteLine($"{myString1} and {myString2} are same.");  
      
    // If this method returns false
    // Print both string are different
    else  
        Console.WriteLine($"{myString1} and {myString2} are different.");  
      
    // If this method returns true
    // Print both string are same
    if (String.Equals(myString1, myString3))  
        Console.WriteLine($"{myString1} and {myString3} are same.");  
      
    // If this method returns false
    // Print both string are different
    else  
        Console.WriteLine($"{myString1} and {myString3} are different.");  
      
    // If this method returns true
    // Print both string are same
    if (String.Equals(myString2, myString3))  
        Console.WriteLine($"{myString2} and {myString3} are same.");  
      
    // If this method returns false
    // Print both string are different
    else  
        Console.WriteLine($"{myString2} and {myString3} are different.");           
}
}
Producción

GeeksforGeeks and Geeks are different.
GeeksforGeeks and GeeksforGeeks are same.
Geeks and GeeksforGeeks are different.

Método 2: Usar el método String.Compare()

Este método también se define en la clase String. Este método también toma dos strings para comparar como parámetros. Devuelve un valor numérico dependiendo de las strings pasadas al método. Este método proporciona información detallada sobre la comparación de strings, por eso es ventajoso sobre el método String.equals() .

Sintaxis:

String.Compare(myString1, myString2)

Parámetros: Toma dos parámetros myString1: Primera string y myString2: Segunda string 

Tipo de retorno: El tipo de retorno de este método es Integer. Será:

  • Menor que cero: si la primera string es lexicográficamente más pequeña que la segunda string.
  • cero: si ambas strings son iguales.
  • Mayor que cero: si la primera string es lexicográficamente mayor que la segunda string.

Ejemplo:

C#

// C# program to illustrate the working of
// String.Compare() method to compare two strings
using System;
  
class GFG{
  
static public void Main()
{
      
    // Initialize a string
    string myString1 = "GeeksforGeeks";  
      
    // Initialize another string
    string myString2 = "Geeks"; 
      
    // Initialize another string
    string myString3 = "GeeksforGeeks";
      
    // If value returned by this method is equal to 0
    // Print both string are same
    if (String.Compare(myString1, myString2) == 0)  
        Console.WriteLine($"{myString1} and {myString2} are same.");  
      
    // If value returned by this method is less than 0
    // Then print first string is smaller than the second string
    else if(String.Compare(myString1, myString2) < 0)
        Console.WriteLine(
            $"{myString1} is lexicographically smaller than {myString2}.");  
      
    // If value returned by the method is greater than 0
    // Then print first string is greater than the second string
    else 
        Console.WriteLine(
            $"{myString1} is lexicographically greater than {myString2}.");  
      
    // If value returned by this method is equal to 0
    // Print both string are same      
    if (String.Compare(myString1, myString3) == 0)  
        Console.WriteLine($"{myString1} and {myString3} are same.");  
      
    // If value returned by this method is less than 0
    // Then print first string is smaller than the second string
    else if (String.Compare(myString1, myString3) < 0)
        Console.WriteLine(
            $"{myString1} is lexicographically smaller than {myString3}.");  
      
    // If value returned by the method is greater than 0
    // Then print first string is greater than the second string 
    else 
        Console.WriteLine(
            $"{myString1} is lexicographically greater than {myString3}.");  
      
    // If value returned by this method is equal to 0
    // Print both string are same            
    if (String.Compare(myString2, myString3) == 0)  
        Console.WriteLine($"{myString2} and {myString3} are same.");  
      
    // If value returned by this method is less than 0
    // Then print first string is smaller than the second string
    else if (String.Compare(myString2, myString3) < 0)
        Console.WriteLine(
            $"{myString2} is lexicographically smaller than {myString3}.");  
      
    // If value returned by the method is greater than 0
    // Then print first string is greater than the second string       
    else 
        Console.WriteLine(
            $"{myString2} is lexicographically greater than {myString3}.");  
}
}
Producción

GeeksforGeeks is lexicographically greater than Geeks.
GeeksforGeeks and GeeksforGeeks are same.
Geeks is lexicographically smaller than GeeksforGeeks.

Método 3: Uso del método CompareTo()

Este es un método de instancia definido bajo la clase String y se aplica directamente a una string o un objeto de string. Devuelve un valor numérico dependiendo de las strings a comparar. Este método proporciona información detallada sobre la comparación de strings, por eso es ventajoso sobre el método String.equals() .

Sintaxis:

miString1.CompararTo(miString2)

Parámetros: Toma un parámetro que es myString2: Segunda string 

Tipo de retorno: El tipo de retorno de este método es Integer. Será:

  • Menor que cero: si la primera string es lexicográficamente más pequeña que la segunda string.
  • cero: si ambas strings son iguales.
  • Mayor que cero: si la primera string es lexicográficamente mayor que la segunda string.

Ejemplo:

C#

// C# program to illustrate the working of
// CompareTo() method to compare two strings
using System;
  
class GFG{
  
static public void Main()
{
      
    // Initialize a string
    string myString1 = "GeeksforGeeks";  
      
    // Initialize another string
    string myString2 = "Geeks";  
      
    // Initialize another string
    string myString3 = "GeeksforGeeks";
      
    // If value returned by this method is equal to 0
    // Then display both strings are equal 
    if (myString1.CompareTo(myString2) == 0)  
        Console.WriteLine($"{myString1} and {myString2} are same.");  
      
    // If value returned by this method is less than 0
    // Then print the first string is smaller than the second string 
    else if (myString1.CompareTo(myString2) < 0)
        Console.WriteLine(
            $"{myString1} is lexicographically smaller than {myString2}.");  
      
    // If value returned by this method is greater than 0
    // Then print the first string is greater than the second string       
    else 
        Console.WriteLine(
            $"{myString1} is lexicographically greater than {myString2}.");  
      
    // If value returned by this method is equal to 0
    // Then print both strings are equal       
    if (myString1.CompareTo(myString2) == 0)  
        Console.WriteLine($"{myString1} and {myString3} are same.");  
      
    // If value returned by this method is less than 0
    // Then print the first string is smaller than the second string       
    else if(myString1.CompareTo(myString2) < 0)
        Console.WriteLine(
            $"{myString1} is lexicographically smaller than {myString3}.");  
      
    // If value returned by this method is greater than 0
    // Then print the first string is greater than the second string
    else 
        Console.WriteLine(
            $"{myString1} is lexicographically greater than {myString3}.");  
      
    // If value returned by this method is equal to 0
    // Then display both strings are equal         
    if (myString1.CompareTo(myString2) == 0)  
        Console.WriteLine($"{myString1} and {myString2} are same.");  
      
    // If value returned by this method is less than 0
    // Then print the first string is smaller than the second string  
    else if (myString1.CompareTo(myString2) < 0)
        Console.WriteLine(
            $"{myString2} is lexicographically smaller than {myString3}.");  
      
    // If value returned by this method is greater than 0
    // Then print the first string is greater than the second string 
    else 
    Console.WriteLine(
        $"{myString2} is lexicographically greater than {myString3}.");  
}
}
Producción

GeeksforGeeks is lexicographically greater than Geeks.
GeeksforGeeks is lexicographically greater than GeeksforGeeks.
Geeks is lexicographically greater than GeeksforGeeks.

Método 4: Usar el método compare() de la clase StringComparer

Este método se define en la clase StringComparer. Podemos crear un objeto de esta clase con la ayuda del cual podemos usar el método Compare() para comparar dos strings. Este método proporciona información detallada sobre la comparación de strings, por eso es ventajoso sobre el método String.equals() .

Sintaxis:

StringComparer myComparer = StringComparer.OrdinalIgnoreCase;  

miComparador.Comparar(miString1, miString2);  

Parámetros: Toma dos parámetros myString1: Primera string y myString2: Segunda string 

Tipo de retorno: El tipo de retorno de este método es Integer. Será:

  • Menor que cero: si la primera string es lexicográficamente más pequeña que la segunda string.
  • cero: si ambas strings son iguales.
  • Mayor que cero: si la primera string es lexicográficamente mayor que la segunda string.

Ejemplo:

C#

// C# program to illustrate the working of Compare() method 
// of StringComparer class to compare two strings
using System;
  
class GFG{
  
static public void Main()
{
      
    // Declare an object of class StringComparer
    StringComparer myComparer = StringComparer.OrdinalIgnoreCase;
      
    // Initialize a string
    string myString1 = "GeeksforGeeks";
      
    // Initialize another string
    string myString2 = "Geeks"; 
      
    // Initialize another string
    string myString3 = "GeeksforGeeks";
      
    // Compare strings using Compare method 
    // on the instantiated object
      
    // If this method returns 0
    // Print both strings are same
    if (myComparer.Compare(myString1, myString2) == 0)  
        Console.WriteLine($"{myString1} and {myString2} are same.");  
      
    // If value returned by this method is smaller than 0
    // Then print the first string is smaller than the second string     
    else if (myComparer.Compare(myString1, myString2) < 0)
        Console.WriteLine(
            $"{myString1} is lexicographically smaller than {myString2}.");  
      
    // If value returned by this method is smaller than 0
    // Then print the first string is smaller than the second string   
    else 
        Console.WriteLine(
            $"{myString1} is lexicographically greater than {myString2}.");  
      
    // If this method returns 0
    // Print both strings are same      
    if (myComparer.Compare(myString1, myString3) == 0)  
        Console.WriteLine($"{myString1} and {myString3} are same.");  
      
    // If value returned by this method is smaller than 0
    // Then print the first string is smaller than the second string  
    else if (myComparer.Compare(myString1, myString3) < 0)
        Console.WriteLine(
            $"{myString1} is lexicographically smaller than {myString3}.");  
      
    // If value returned by this method is smaller than 0
    // Then print the first string is smaller than the second string 
    else 
        Console.WriteLine(
            $"{myString1} is lexicographically greater than {myString3}.");  
      
    // If this method returns 0
    // Print both strings are same            
    if (myComparer.Compare(myString2, myString3) == 0)  
        Console.WriteLine($"{myString2} and {myString3} are same.");  
      
    // If value returned by this method is smaller than 0
    // Then print the first string is smaller than the second string        
    else if (myComparer.Compare(myString2, myString3) < 0)
        Console.WriteLine(
            $"{myString2} is lexicographically smaller than {myString3}.");  
      
    // If value returned by this method is greater than 0
    // Then print the first string is greater than the second string 
    else 
        Console.WriteLine(
            $"{myString2} is lexicographically greater than {myString3}.");  
}
}
Producción

GeeksforGeeks is lexicographically greater than Geeks.
GeeksforGeeks and GeeksforGeeks are same.
Geeks is lexicographically smaller than GeeksforGeeks.

Método 5: Comparando carácter por carácter (usando el método de comparación personalizado)

Las strings se pueden comparar carácter por carácter. Siga los pasos a continuación para comparar dos strings usando un método de comparación personalizado.

  1. Declarar un método estático Comparar fuera del método principal. Establezca el tipo de devolución de este método como int.
  2. Inicialice una variable len como el mínimo de las longitudes de ambas strings.
  3. Iterar sobre index = 0 hasta index = len – 1 usando un bucle for. En cada iteración, compare los caracteres correspondientes de las strings.
  4. Si el primer carácter no coincidente de la primera string en el índice es menor que el carácter de la segunda string en el índice, devolveremos -1.
  5. Si el primer carácter no coincidente de la primera string en el índice es menor que el carácter de la segunda string en el índice , devolveremos 1.
  6. Después del final del ciclo for, si las longitudes de ambas strings son iguales, devuelve 0. Si la longitud de la primera string es menor que la segunda string, devuelve -1; de lo contrario, devuelve 1.
  7. Llame a la función Compare() desde la función principal pasando strings para compararlas como parámetros. Si la función Comparar() devuelve 0, entonces imprime la primera string es la misma que la segunda string. Si la función Comparar() devuelve -1, entonces la primera string de impresión es más pequeña que la segunda string; de lo contrario, la primera string de impresión es mayor que la segunda string.

Ejemplo:

C#

// C# program to illustrate the working of
// custom Compare() method to compare two strings 
using System;
  
class GFG{
          
// Compare method to compare two strings
static public int Compare(string myString1, string myString2)
{
      
    // len stores minimum of two string lengths 
    int len = Math.Min(myString1.Length, myString2.Length);
      
    // Iterate over all characters
    for(int index = 0; index < len; index++)
    {
          
        // If the first not matched character of first
        // string is smaller than the second string then
        // return -1
        if (myString1[index] < myString2[index])
            return -1;
          
        // If the first not matched character of first
        // string is greater than the second string then
        // return 1          
        else if (myString1[index] > myString2[index])
            return 1;
    }
      
    // If lengths are equal
    // Return 0
    if (myString1.Length ==  myString2.Length)
        return 0;
      
    // If length of first string is smaller than the second string 
    // then return -1
    // If length of first string is greater than the second string 
    // then return 1
    return ((myString1.Length <  myString2.Length) ? -1 : 1); 
}
  
// Driver code
static public void Main()
{
  
    // Initialize a string
    string myString1 = "GeeksforGeeks";  
      
    // Initialize another string
    string myString2 = "Geeks";  
      
    // Initialize another string
    string myString3 = "GeeksforGeeks";
      
    // If value returned by this method is equal to 0
    // Then print both strings are same           
    if (Compare(myString1, myString2) == 0)  
        Console.WriteLine($"{myString1} and {myString2} are same.");  
      
    // If value returned by this method is smaller than 0
    // Then print the first string is smaller than the second string 
    else if (Compare(myString1, myString3) < 0)
        Console.WriteLine(
            $"{myString1} is lexicographically smaller than {myString2}.");  
      
    // If value returned by this method is greater than 0
    // Then print the first string is greater than the second string       
    else 
        Console.WriteLine(
            $"{myString1} is lexicographically greater than {myString2}.");
      
    // If value returned by this method is equal to 0
    // Then print both strings are same          
    if (Compare(myString1, myString3) == 0)  
        Console.WriteLine($"{myString1} and {myString3} are same.");  
      
    // If value returned by this method is smaller than 0
    // Then print the first string is smaller than the second string       
    else if (Compare(myString1, myString3) < 0)
        Console.WriteLine(
            $"{myString1} is lexicographically smaller than {myString3}.");  
      
    // If value returned by this method is greater than 0
    // Then print the first string is greater than the second string  
    else 
        Console.WriteLine(
            $"{myString1} is lexicographically greater than {myString3}.");
      
    // If value returned by this method is equal to 0
    // Then print both strings are same              
    if (Compare(myString2, myString3) == 0)  
        Console.WriteLine($"{myString2} and {myString3} are same.");  
      
    // If value returned by this method is smaller than 0
    // Then print the first string is smaller than the second string
    else if (Compare(myString2, myString3) < 0)
        Console.WriteLine(
            $"{myString2} is lexicographically smaller than {myString3}.");  
      
    // If value returned by this method is greater than 0
    // Then print the first string is greater than the second string  
    else 
        Console.WriteLine(
            $"{myString2} is lexicographically greater than {myString3}.");
}
}
Producción

GeeksforGeeks is lexicographically greater than Geeks.
GeeksforGeeks and GeeksforGeeks are same.
Geeks is lexicographically smaller than GeeksforGeeks.

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *