在 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