如何在 Java 中排序字符串

原文:https://www.studytonight.com/java-examples/how-to-sort-string-in-java

在本教程中,我们将学习如何对字符串进行排序。在 Java 中,String类中没有一个用于排序的方法。另一个困难是字符串在 Java 中是不可变的,这意味着我们不能修改原始字符串。另一方面,我们可以对字符数组执行非常灵活的操作,我们将使用字符数组的这个属性来对我们的字符串进行排序。

有两种方法可以对字符串进行排序

  • 使用Arrays.sort()
  • Arrays.sort()中使用Comparator
  • 使用普通算法如Selection SortBubble Sort等进行正常排序。

使用数组对字符串进行排序的示例。sort()方法

在下面的代码中,使用 toCharArray()方法将片段原始字符串转换为字符数组,稍后使用Arrays.sort() 方法对其进行排序,然后返回到前面声明的 sortedString 变量。

enlightened “敏捷的棕色狐狸跳过懒惰的狗”是包含字母表中每个字母至少一次的字符串。

import java.util.Arrays; 

public class StudyTonight 
{ 
    public static void main(String[] args) 
    { 
        String originalString = "The quick brown fox jumps over the lazy dog"; 
        String sortedString = "";
        //converting string to character array
        char tempString[] = originalString.toCharArray(); 
        //perform sort using Arrays.sort() method
        Arrays.sort(tempString); 
        //storing sorted character array back to string
        sortedString = new String(tempString); 
        System.out.println("Original String : " + originalString); 
        System.out.println("Sorted String : " + sortedString); 
    } 
}

原弦:快棕狐狸跳过懒狗 排序弦:tabcdeefghhijklmnoopqrstuuvwxyz

在上面的程序中,您可能已经注意到一个大写字符首先显示,这意味着所有大写字母的优先级都高于小写字母。如果我们想排序而不考虑区分大小写呢?在这种情况下,我们需要一个定制的Comparator函数。

使用数组、排序()和Comparator函数对字符串进行排序的示例

在这里,需要记住的要点是:我们不能添加具有原始数据类型的Comparator,这就是为什么我们创建了一个字符类的数组,然后应用Comparator函数,并使用Character.toLowerCase()方法将所有输入字符的大小写更改为小写。最后,我们使用StringBuilder 类来构建一个排序的字符串。

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

public class StudyTonight 
{ 
    public static void main(String[] args) 
    { 
        String originalString = "The quick brown fox jumps over the lazy dog"; 
        String sortedString = "";
        //length of string
        int n=originalString.length();
        //Building array of Character Array
        Character tempString[] = new Character[n]; 
        for (int i = 0; i < originalString.length(); i++)
        { 
            tempString[i] = originalString.charAt(i); 
        } 
        //perform sort using Arrays.sort() with comparator function
        Arrays.sort(tempString, new Comparator<Character>(){ 
            @Override
            public int compare(Character c1, Character c2) 
            { 
                //here we are converting character to lowercase 
                return Character.compare(Character.toLowerCase(c1),Character.toLowerCase(c2)); 
            } 
        }); 
        //StringBuilder to create string from Characters
        StringBuilder sb = new StringBuilder(tempString.length); 
        for (Character c : tempString) 
            sb.append(c.charValue()); 
        //Storing sorted string in sortedString variable
        sortedString = sb.toString();
        System.out.println("Original String : " + originalString); 
        System.out.println("Sorted String : " + sortedString); 
    } 
}

原弦:快棕狐狸跳过懒狗 排序弦:abcdeeefghhijklmnoooopqrrsTtuuvwxyz

enlightened现在我们已经排序了字符串,没有区分大小写的影响。

使用传统方式比较和交换的字符串排序示例

在使用内置方法实现排序后,您能从零开始考虑解决方案吗?因此,这里有一个字符数组排序的例子,我们实现了嵌套循环,对于每个字符,它将比较它右边的字符,如果发现较小的字符,我们将其与当前字符交换。像往常一样完成后,我们将把这个排序后的字符数组存储在一个字符串中。

import java.util.Arrays; 

public class StudyTonight 
{ 
    public static void main(String[] args) 
    { 
        String originalString = "The quick brown fox jumps over the lazy dog"; 
        String sortedString = "";
        //converting string to character array
        char tempString[] = originalString.toCharArray(); 
        int n= tempString.length;
        for(int i = 0; i < n; i++ ) 
        {
            for(int j = i+1; j < n; j++) 
            {
                if(tempString[i]>tempString[j]) {
                    char temp = tempString[i];
                    tempString[i] = tempString[j];
                    tempString[j] = temp;
                }
            }
        }
        //storing sorted character array back to string
        sortedString = new String(tempString); 
        System.out.println("Original String : " + originalString); 
        System.out.println("Sorted String : " + sortedString); 
    } 
}

原弦:快棕狐狸跳过懒狗 排序弦:tabcdeefghhijklmnoopqrstuuvwxyz

这不是旅程的终点。你可以试试那些流行的算法,比如Selection SortBubble Sort等。

结论:

要对给定的字符串进行排序,String类没有可用的方法,但是另一方面,我们可以对字符数组执行许多操作。对字符串进行排序最简单的方法是使用Arrays.sort() ,但它区分大小写。为了避免字符串排序时区分大小写,我们可以使用比较函数。