Java で文字列をアルファベット順に比較する

Rupam Yadav 2023年10月12日
  1. compareTo() を使用して文字列をアルファベット順に比較する
  2. 従来の方法を使用して文字列をアルファベット順に比較する
Java で文字列をアルファベット順に比較する

Java で 2つ以上の文字列を比較する方法はいくつかありますが、文字列を辞書式(アルファベット順)で比較したい場合は、こちらの記事を参照します。辞書式順序は、辞書内の単語の配置に従います。以下に、Java で文字列をアルファベット順に比較する 2つの方法を示す例を示します。

compareTo() を使用して文字列をアルファベット順に比較する

この例では、いくつかの文字列を比較して、結果が正しいかどうかを確認します。compareTo() メソッドには String クラスが付属しているため、任意の文字列で呼び出して、別の文字列と比較できます。以下では、s1s2s3s4s5s6 などを比較します。

compareTo() を使用して文字列を比較すると、このメソッドは、文字列の前後または等しいかどうかを示す int 値を返します。たとえば、s1.compare(s2) を使用して、値が apples1oranges2 を比較すると、comparedResult 関数は負の整数を取得します。これは、s1 の値は s2 の前にあります。

s3s4 と比較される場合のように、comparedResult が正の整数を取得する場合、辞書式順序では大文字が小文字の前に来るため、s3s4 の後に来ることを意味します。

compareTo() メソッドがゼロを返す場合、s9s10 の場合のように、比較された両方の文字列が等しいことを意味します。

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);
    }
  }
}

出力:

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

従来の方法を使用して文字列をアルファベット順に比較する

この例では、前の例と同じ出力で同じ文字列を使用しますが、方法が異なります。クラスのメソッドを使用する代わりに、独自のメソッドを作成します。compareStrings() は、比較が行われるメソッドです。

compareStrings() では、文字列 s1s2 の両方が終了するまでチェックするループを作成します。ループ内では、最初に charAt() を使用して文字列の文字を取得し、それを int にキャストします。これは ASCII 値を返します。両方の文字列に対してこれを行い、ASCII 値を比較します。すべての ASCII 値が等しい場合、それは両方の文字列も等しいことを意味します。

ASCII 値が異なる場合は、(int) s1.charAt(i) - (int) s2.charAt(i); を使用して文字列の ASCII 値の差を返します。ループの後、文字列の長さを確認し、文字列間の差を返します。

最後に、compareStrings() メソッドによって返された int 値を取得し、それを文字列とともに getComparisonResult() 関数に渡します。この関数は、文字列が前後にあるかどうか、またはその結果を出力します。等しい。

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

出力:

apple comes before orange
apple comes after Orange
sole comes before soul
john comes before johnson
one and one are equal
著者: Rupam Yadav
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

関連記事 - Java String