使用 Arrays.sort() 在 Java 中对字符串进行排序

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在 Java 中,String 类内部并没有专门用于排序的方法。然而,我们可以利用字符数组可以轻松使用各种算法进行排序的特性。在 Java 中有多种方法可以对字符串进行排序,例如使用 Arrays.sort()Arrays.sort() 中的 Comparator,或者常用的排序算法如 Selection SortBubble Sort。在本实验中,我们将探讨如何使用 Arrays.sort() 方法在 Java 中对字符串进行排序。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/StringManipulationGroup(["`String Manipulation`"]) java(("`Java`")) -.-> java/DataStructuresGroup(["`Data Structures`"]) java(("`Java`")) -.-> java/SystemandDataProcessingGroup(["`System and Data Processing`"]) java/BasicSyntaxGroup -.-> java/for_loop("`For Loop`") java/BasicSyntaxGroup -.-> java/output("`Output`") java/StringManipulationGroup -.-> java/strings("`Strings`") java/DataStructuresGroup -.-> java/arrays("`Arrays`") java/DataStructuresGroup -.-> java/arrays_methods("`Arrays Methods`") java/DataStructuresGroup -.-> java/sorting("`Sorting`") java/SystemandDataProcessingGroup -.-> java/string_methods("`String Methods`") subgraph Lab Skills java/for_loop -.-> lab-117456{{"`使用 Arrays.sort() 在 Java 中对字符串进行排序`"}} java/output -.-> lab-117456{{"`使用 Arrays.sort() 在 Java 中对字符串进行排序`"}} java/strings -.-> lab-117456{{"`使用 Arrays.sort() 在 Java 中对字符串进行排序`"}} java/arrays -.-> lab-117456{{"`使用 Arrays.sort() 在 Java 中对字符串进行排序`"}} java/arrays_methods -.-> lab-117456{{"`使用 Arrays.sort() 在 Java 中对字符串进行排序`"}} java/sorting -.-> lab-117456{{"`使用 Arrays.sort() 在 Java 中对字符串进行排序`"}} java/string_methods -.-> lab-117456{{"`使用 Arrays.sort() 在 Java 中对字符串进行排序`"}} end

编写代码

在这一步中,我们将编写一个 Java 程序,使用 Arrays.sort() 函数对字符串进行排序。代码接收一个输入字符串,将其转换为字符数组,使用 Arrays.sort() 函数对数组进行排序,然后再将其转换回字符串。

import java.util.Arrays;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        char[] tempArr = originalString.toCharArray();   // 将字符串转换为字符数组
        Arrays.sort(tempArr);   // 对字符数组进行排序
        sortedString = new String(tempArr);   // 将排序后的字符数组转换为字符串
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }
}

编译并运行代码

打开终端并导航到 ~/project 目录。使用以下命令编译 Java 程序:

javac SortString.java

使用以下命令运行 Java 程序:

java SortString

程序的输出结果将是:

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    Tabcdeeefghhijklmnoooopqrrstuuvwxyz

实现不区分大小写的排序

在 Java 中,Arrays.sort() 方法通过字符的 Unicode 值进行比较。为了实现不区分大小写的字符串排序,我们可以使用 Comparator 修改排序算法。在这一步中,我们将编辑之前的 Java 代码,使其能够在不区分大小写的情况下对字符串进行排序。

import java.util.Arrays;
import java.util.Comparator;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        Character[] tempArr = toCharacterArray(originalString.toLowerCase());   // 将字符串转换为小写并转换为 Character 数组
        Arrays.sort(tempArr, new Comparator<Character>() {   // 使用不区分大小写的比较器进行排序
            @Override
            public int compare(Character c1, Character c2) {
                return c1.compareTo(c2);
            }
        });
        StringBuilder sb = new StringBuilder(tempArr.length);   // 创建一个 StringBuilder 对象
        for (Character c : tempArr) {
            sb.append(c.charValue());   // 将排序后的字符添加到 StringBuilder 对象中
        }
        sortedString = sb.toString();   // 将 StringBuilder 对象转换为字符串
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }

    // 将字符串转换为 Character 数组的方法
    private static Character[] toCharacterArray(String str) {
        Character[] arr = new Character[str.length()];
        for (int i = 0; i < str.length(); i++) {
            arr[i] = str.charAt(i);
        }
        return arr;
    }
}

编译并运行更新后的代码

使用以下命令编译更新后的 Java 程序:

javac SortString.java

使用以下命令运行 Java 程序:

java SortString

程序的输出结果将是:

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    abcdeeefghhijklmnoooopqrrsttuuvwxyz

使用传统方法实现排序

在这一步中,我们将使用传统的嵌套循环方法对字符数组进行排序。该算法会将每个字符与其右侧的字符进行比较,如果右侧的字符小于当前字符,则交换它们的位置。

import java.util.Arrays;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        char[] tempArr = originalString.toCharArray();   // 将字符串转换为字符数组
        int n = tempArr.length;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (tempArr[i] > tempArr[j]) {
                    char temp = tempArr[i];
                    tempArr[i] = tempArr[j];
                    tempArr[j] = temp;
                }
            }
        }
        sortedString = new String(tempArr);   // 将排序后的字符数组转换为字符串
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }
}

编译并运行更新后的代码

使用之前的命令编译更新后的 Java 程序:

javac SortString.java

使用以下命令运行 Java 程序:

java SortString

程序的输出结果将是:

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    Tabcdeeefghhijklmnoooopqrrstuuvwxyz

总结

在本实验中,我们学习了如何使用 Arrays.sort() 方法对字符串进行排序。我们还学习了如何使用 Comparator 实现不区分大小写的排序,以及如何使用嵌套循环实现传统排序。

您可能感兴趣的其他 Java 教程