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

Rupam Yadav 2023年10月12日
  1. 使用 compareTo() 按字母順序比較字串
  2. 使用傳統方式按字母順序比較字串
在 Java 中按字母順序比較字串

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

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

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

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

如果 comparedResult 得到一個正整數,當 s3s4 進行比較時,這意味著 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