如何在 Java 中排序字符串
原文:https://www.studytonight.com/java-examples/how-to-sort-string-in-java
在本教程中,我们将学习如何对字符串进行排序。在 Java 中,String
类中没有一个用于排序的方法。另一个困难是字符串在 Java 中是不可变的,这意味着我们不能修改原始字符串。另一方面,我们可以对字符数组执行非常灵活的操作,我们将使用字符数组的这个属性来对我们的字符串进行排序。
有两种方法可以对字符串进行排序
- 使用
Arrays.sort()
- 在
Arrays.sort()
中使用Comparator
- 使用普通算法如
Selection Sort
、Bubble Sort
等进行正常排序。
使用数组对字符串进行排序的示例。sort()方法
在下面的代码中,使用 toCharArray()
方法将片段原始字符串转换为字符数组,稍后使用Arrays.sort()
方法对其进行排序,然后返回到前面声明的 sortedString 变量。
“敏捷的棕色狐狸跳过懒惰的狗”是包含字母表中每个字母至少一次的字符串。
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
现在我们已经排序了字符串,没有区分大小写的影响。
使用传统方式比较和交换的字符串排序示例
在使用内置方法实现排序后,您能从零开始考虑解决方案吗?因此,这里有一个字符数组排序的例子,我们实现了嵌套循环,对于每个字符,它将比较它右边的字符,如果发现较小的字符,我们将其与当前字符交换。像往常一样完成后,我们将把这个排序后的字符数组存储在一个字符串中。
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 Sort
、Bubble Sort
等。
结论:
要对给定的字符串进行排序,String
类没有可用的方法,但是另一方面,我们可以对字符数组执行许多操作。对字符串进行排序最简单的方法是使用Arrays.sort()
,但它区分大小写。为了避免字符串排序时区分大小写,我们可以使用比较函数。