HOWTO · Java

在 Java 中按字母順序比較字串

本文闡明瞭在 Java 中按字母順序比較字串。

本頁內容

在 Java 中有多種方法可以比較兩個或多個字串,但如果你想按字典順序(按字母順序)比較字串,請參閱這篇文章。字典順序遵循字典中的單詞排列。下面的示例展示了在 Java 中按字母順序比較字串的兩種方法。

使用 compareTo() 按字母順序比較字串

在示例中,我們比較了幾個字串以檢視結果是否正確。compareTo() 方法帶有 String 類,因此我們可以用任何字串呼叫它來與另一個字串進行比較。下面我們將 s1 與 s2、s3 與 s4、s5 與 s6 等進行比較。

當我們使用 compareTo() 比較字串時,該方法返回一個 int 值,該值告訴我們字串應該放在之前或之後的位置,或者它們是否相等。例如,如果我們使用 s1.compare(s2) 將值為 apple 的 s1 與值為 orange 的 s2 進行比較,則 comparedResult 函式將得到一個負整數——這意味著 s1 值在 s2 之前。

如果 comparedResult 得到一個正整數,當 s3 與 s4 進行比較時,這意味著 s3 在 s4 之後,因為按字典順序,大寫字母在小寫字母之前。

如果 compareTo() 方法返回零,則表示兩個比較的字串相等,如 s9 和 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);
    }
  }
}

輸出:

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

使用傳統方式按字母順序比較字串

在這個例子中,我們採用與前面的例子相同的輸出相同的字串,但方法不同。我們不使用任何類的方法,而是建立自己的方法。compareStrings() 是進行比較的方法。

在 compareStrings() 中,我們建立了一個迴圈,檢查直到字串 s1 和 s2 的結尾。在迴圈內部,我們首先使用 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