Comparar cadenas alfabéticamente en Java

Rupam Yadav 12 octubre 2023
  1. Comparar cadenas alfabéticamente usando compareTo()
  2. Comparar cadenas alfabéticamente usando la forma tradicional
Comparar cadenas alfabéticamente en Java

Hay varias formas de comparar dos o más cadenas en Java, pero si desea comparar las cadenas lexicográficamente (alfabéticamente), aquí está el artículo para usted. El orden lexicográfico sigue la disposición de las palabras en un diccionario. A continuación, tenemos ejemplos que muestran dos formas de comparar cadenas alfabéticamente en Java.

Comparar cadenas alfabéticamente usando compareTo()

En el ejemplo, comparamos varias cadenas para ver si los resultados son correctos. El método compareTo() viene con la clase String, por lo que podemos llamarlo con cualquier cadena para compararlo con otra cadena. A continuación comparamos s1 con s2, s3 con s4, s5 con s6, y así sucesivamente.

Cuando comparamos las cadenas usando compareTo(), este método devuelve un valor int que nos dice dónde deben ir las cadenas antes o después o si son iguales. Por ejemplo, si comparamos s1 que tiene el valor apple con s2 que tiene orange usando s1.compare(s2), la función compareResult obtendrá un entero negativo - esto significa que el El valor de s1 viene antes que s2.

Si compareResult obtiene un número entero positivo, como cuando s3 se compara con s4, significa que s3 viene después de s4 porque lexicográficamente, las letras mayúsculas van antes de las minúsculas.

Si el método compareTo() devuelve cero, significa que ambas cadenas comparadas son iguales, como en el caso de s9 y s10.

class CompareStrings {
  public static void main(String args[]) {
    String s1 = "apple";
    String s2 = "orange";
    compareStrings(s1, s2);
    String s3 = "apple";
    String s4 = "Orange";
    compareStrings(s3, s4);
    String s5 = "sole";
    String s6 = "soul";
    compareStrings(s5, s6);
    String s7 = "john";
    String s8 = "johnson";
    compareStrings(s7, s8);
    String s9 = "one";
    String s10 = "one";
    compareStrings(s9, s10);
  }

  public static void compareStrings(String s1, String s2) {
    int comparedResult = s1.compareTo(s2);

    if (comparedResult > 0) {
      System.out.println(s1 + " comes after " + s2);
    } else if (comparedResult < 0) {
      System.out.println(s1 + " comes before " + s2);
    } else {
      System.out.println(s1 + " is equal to " + s2);
    }
  }
}

Producción :

apple comes before orange
apple comes after Orange
sole comes before soul
john comes before johnson
one is equal to one

Comparar cadenas alfabéticamente usando la forma tradicional

En este ejemplo, tomamos las mismas cadenas con el mismo resultado que el ejemplo anterior, pero el método es diferente. En lugar de utilizar un método de cualquier clase, creamos nuestros propios métodos. compareStrings() es el método donde se produce la comparación.

En compareStrings(), creamos un bucle que verifica hasta el final de ambas cadenas, s1 y s2. Dentro del bucle, primero obtenemos los caracteres de la cadena usando charAt() y lo convertimos en int, que devuelve un valor ASCII. Hacemos esto para ambas cadenas y luego comparamos los valores ASCII. Si todos los valores ASCII son iguales, eso significa que ambas cadenas también son iguales.

Si los valores ASCII son diferentes, devolvemos la diferencia entre los valores ASCII de cadenas usando (int) s1.charAt(i) - (int) s2.charAt(i);. Después del bucle, verificamos la longitud de las cadenas y luego devolvemos la diferencia entre ellas.

Por último, tome el valor int devuelto por el método compareStrings() y páselo con las cadenas a la función getComparisonResult(), que imprime el resultado si la cadena debe venir antes o después, o si son igual.

class CompareStrings {
  public static void main(String[] args) {
    String s1 = "apple";
    String s2 = "orange";
    int getValue1 = compareStrings(s1, s2);

    String s3 = "apple";
    String s4 = "Orange";
    int getValue2 = compareStrings(s3, s4);

    String s5 = "sole";
    String s6 = "soul";
    int getValue3 = compareStrings(s5, s6);

    String s7 = "john";
    String s8 = "johnson";
    int getValue4 = compareStrings(s7, s8);

    String s9 = "one";
    String s10 = "one";
    int getValue5 = compareStrings(s9, s10);

    getComparisonResult(getValue1, s1, s2);
    getComparisonResult(getValue2, s3, s4);
    getComparisonResult(getValue3, s5, s6);
    getComparisonResult(getValue4, s7, s8);
    getComparisonResult(getValue5, s9, s10);
  }

  public static int compareStrings(String s1, String s2) {
    for (int i = 0; i < s1.length() && i < s2.length(); i++) {
      if ((int) s1.charAt(i) == (int) s2.charAt(i)) {
        continue;
      } else {
        return (int) s1.charAt(i) - (int) s2.charAt(i);
      }
    }

    if (s1.length() < s2.length()) {
      return (s1.length() - s2.length());
    } else if (s1.length() > s2.length()) {
      return (s1.length() - s2.length());
    } else {
      return 0;
    }
  }

  private static void getComparisonResult(int value, String s1, String s2) {
    if (value > 0) {
      System.out.println(s1 + " comes after " + s2);
    } else if (value < 0) {
      System.out.println(s1 + " comes before " + s2);
    } else {
      System.out.println(s1 + " and " + s2 + " are equal");
    }
  }
}

Producción :

apple comes before orange
apple comes after Orange
sole comes before soul
john comes before johnson
one and one are equal
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artículo relacionado - Java String