在 Java 中按字母順序對字串陣列進行排序

Mohammad Irfan 2023年10月12日
  1. 在 Java 中不使用內建方法對字串陣列進行排序
  2. 使用 Java 中的 stringArraySort() 方法對字串陣列進行排序
  3. 使用 Java 中的 compareTo() 方法對字串陣列進行排序
  4. 使用 Java 中的 Arrays.sort() 方法對字串陣列進行排序
  5. 在 Java 中按降序對字串陣列進行排序
  6. 通過忽略 Java 中的大小寫對字串陣列進行排序
  7. 在 Java 中按字母順序對字串陣列進行排序
在 Java 中按字母順序對字串陣列進行排序

本教程介紹如何在 Java 中按字母順序對字串陣列進行排序。我們還列出了一些示例程式碼以幫助你理解該主題。

排序是按特定順序排列資料。我們可以按升序或降序對整數進行排序,也可以按字典順序對英文字元或單詞進行排序。

字典順序是單詞出現在英語單詞字典中時出現的順序。在本指南中,我們將教你如何在 Java 中對字串陣列進行排序。

我們將本文中的字串與更小或更大的詞進行比較。如果一個字串根據字典順序首先出現,則該字串小於另一個字串。

此外,在字典順序中,所有大寫字母都在小寫字母之前;這意味著以 Z 開頭的單詞將出現在排序陣列中以 a 開頭的單詞之前。

在 Java 中不使用內建方法對字串陣列進行排序

我們將首先嚐試在 Java 中實現我們自己的排序方法。我們將建立一個名為 compareStrings() 的方法,它比較兩個字串並告訴我們哪個更小或哪個更大。

接下來,我們將使用 compareStrings() 方法將每個字串與陣列中存在的所有其他字串進行比較,並將該字串放置在正確的位置。下面給出了這兩種方法的演算法。

  1. 此方法的輸入將是兩個字串,它將返回一個整數值。該方法的輸出如下。
    • 如果 string1 > string2:返回正整數
    • 如果 string1 < string2:返回負整數
    • 如果 string1 == string2:返回 0
  2. 我們將同時迴圈遍歷兩個字串的每個字元並比較它們的 Unicode 值。我們使用內建的 charAt() 方法來獲取 Unicode 值。這些值允許我們將字元作為普通整數進行比較。
  3. 如果兩個字元的 Unicode 值相同,我們將移至每個字串的下一個字元。
  4. 如果 Unicode 值不同,那麼我們返回值的差異。
  5. 當我們用完任一字串中的字元時,迴圈結束。
  6. 如果兩個字串在迴圈外有不同的長度,那麼我們返回這個差值。我們這樣做是因為較小字串的所有字元都可能出現在較長字串的開頭。例如,appapplication。在這種情況下,較長的字串將在較小的字串之後。
  7. 如果字串長度相同,我們將簡單地返回 0,表示兩個字串是相同的。

使用 Java 中的 stringArraySort() 方法對字串陣列進行排序

此方法將字串陣列作為輸入並返回排序後的陣列。在這裡,我們將有兩個迴圈,一個巢狀在另一個迴圈中。它們用於將陣列的每個元素與所有剩餘元素進行比較。

我們使用 compareString() 方法對迴圈內的每對元素進行比較。如果第一個字串比另一個更大,我們交換它們的位置。

完整的程式碼如下所示。

public class Main {
  public static int compareStrings(String word1, String word2) {
    for (int i = 0; i < Math.min(word1.length(), word2.length()); i++) {
      if ((int) word1.charAt(i) != (int) word2.charAt(i)) // comparing unicode values
        return (int) word1.charAt(i) - (int) word2.charAt(i);
    }
    if (word1.length()
        != word2.length()) // smaller word is occurs at the beginning of the larger word
      return word1.length() - word2.length();
    else
      return 0;
  }
  public static String[] stringArraySort(String[] words) {
    for (int i = 0; i < words.length - 1; i++) {
      for (int j = i + 1; j < words.length; j++) {
        if (compareStrings(words[i], words[j]) > 0) // words[i] is greater than words[j]
        {
          String temp = words[i];
          words[i] = words[j];
          words[j] = temp;
        }
      }
    }
    return words;
  }
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    String[] sortedArr = stringArraySort(arrToSort);

    for (int i = 0; i < sortedArr.length; i++) System.out.print(sortedArr[i] + " ");
  }
}

輸出:

Blueberry Strawberry apple bananas oranges

使用 Java 中的 compareTo() 方法對字串陣列進行排序

在上面的程式碼中,我們編寫了一個方法來比較兩個字串並返回一個整數值來表示如果它們出現在字典中,哪個字串將首先出現。

Java 為我們提供了一個名為 compareTo() 的內建方法,它可以為我們完成這項工作。此方法的語法如下所示。

string1.compareTo(string2)

此方法的輸出類似於我們之前定義的 compareStrings() 方法。

  • 如果 string1 > string2:返回正整數
  • 如果 string1 < string2:返回負整數
  • 如果 string1 == string2:返回 0

以下程式碼演示了 compareTo() 方法如何在 Java 中工作。

public class Main {
  public static void main(String[] args) {
    System.out.println("apple".compareTo("orange")); // apple < orange
    System.out.println("AAA".compareTo("aaa")); // AAA < aaa
    System.out.println("ZZZ".compareTo("aaa")); // ZZZ < aaa
    System.out.println("zzz".compareTo("aaa")); // zzz > aaa
    System.out.println("strawberry".compareTo("strawberry")); // strawberry == strawberry
  }
}

輸出:

-14
-32
-7
25
0

我們可以使用 compareTo() 方法對陣列進行排序。這個程式將與上面的前一個程式非常相似。唯一的區別是我們將使用 compareTo() 方法而不是我們之前定義的 compareStrings() 方法。

public class Main {
  public static String[] stringArraySort(String[] words) {
    for (int i = 0; i < words.length - 1; i++) {
      for (int j = i + 1; j < words.length; j++) {
        if (words[i].compareTo(words[j]) > 0) // words[i] is greater than words[j]
        {
          String temp = words[i];
          words[i] = words[j];
          words[j] = temp;
        }
      }
    }
    return words;
  }
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    String[] sortedArr = stringArraySort(arrToSort);
    for (int i = 0; i < sortedArr.length; i++) System.out.print(sortedArr[i] + " ");
  }
}

輸出:

 Blueberry Strawberry apple bananas oranges

使用 Java 中的 Arrays.sort() 方法對字串陣列進行排序

還有一種更簡單的陣列排序方法。我們可以使用 Arrays 類的 sort() 方法來做到這一點。此方法的語法如下所示。

Arrays.sort(stringArray)

預設情況下,它將按自然順序(按字典順序)對陣列進行排序。但是,我們可以通過指定不同的比較器來更改此順序。

比較器是一種用於比較兩個物件並告訴我們哪個比另一個更小或更大的方法。sort() 方法使用 Quicksort 演算法,時間複雜度為 O(n*log(n))

以下程式碼顯示了 sort() 方法的預設行為。

import java.util.Arrays;
public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort);
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

輸出:

Blueberry Strawberry apple bananas oranges

在 Java 中按降序對字串陣列進行排序

要按逆自然順序或降序對陣列進行排序,我們可以使用 reverseOrder() 比較器,如下所示。

import java.util.Arrays;
import java.util.Collections;

public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort, Collections.reverseOrder());
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

輸出:

oranges bananas apple Strawberry Blueberry

通過忽略 Java 中的大小寫對字串陣列進行排序

要按字母順序設定字串陣列但忽略字元的大小寫,請使用下面的程式碼示例。

import java.util.Arrays;
public class Main {
  public static void main(String[] args) {
    String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
    Arrays.sort(arrToSort, String.CASE_INSENSITIVE_ORDER); // case insensitive sort
    for (int i = 0; i < arrToSort.length; i++) {
      System.out.print(arrToSort[i] + " ");
    }
  }
}

輸出:

apple bananas Blueberry oranges Strawberry

在 Java 中按字母順序對字串陣列進行排序

排序是以特定順序排列元素。我們可以按字母順序或字典順序對字串陣列進行排序。Java 有一個內建的 compareTo() 方法,可用於比較兩個字串並判斷哪個大於另一個。我們可以使用這種方法來編寫我們的排序演算法。

Java 也有 Arrays.sort() 方法,它可以對字串陣列進行排序。我們可以為我們的 sort() 方法使用不同的比較器以不同的方式設定陣列順序。

相關文章 - Java String

相關文章 - Java Array