Java中按字母顺序对字符串字符进⾏排序的4种不同⽅法
介绍 :
有时我们需要按字母顺序对字符串中的所有字符进⾏排序。由于String在Java中是不可变的,因此它将创建⼀个不同的字符串变量。例如,字符串“ albert ”在排序后将变为“ abelrt”。在这个Java⽰例中,我们将学习如何以不同的⽅式按字母顺序对字符串的字符进⾏排序。让我们来看看 :
使⽤循环:
任何排序的基本⽅法是使⽤循环。我们将使⽤两个for循环,并且两者都将在另⼀个内部运⾏。外循环将从字符串的左侧开始⼀个接⼀个的选择,内循环将其与字符串左侧的所有其他元素进⾏⽐较。如果发现内循环较⼩的任何元素,我们将其与外循环指向的元素交换。让我⽤代码向您展⽰该算法:
import java.util.Arrays;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
//1
Scanner scanner = new Scanner(System.in);
//2
System.out.println("Enter a string : ");
String userInput = Line();
//3
char[] charArray = CharArray();
//4
for (int i = 0; i < charArray.length; i++) {
for (int j = i + 1; j < charArray.length; j++) {
if (LowerCase(charArray[j]) < LowerCase(charArray[i])) {
swapChars(i, j, charArray);
}
}
}
//6
System.out.println("Sorted string " + String.valueOf(charArray));
}
//5
private static void swapChars(int i, int j, char[] charArray) {
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
}
}
解释 :
1. 创建⼀个Scanner对象以读取⽤户输⼊值。
2. 要求⽤户输⼊⼀个字符串。读取它并将其存储在userInput变量中。
3. 我们计划⽐较此字符串的每个字符并交换并按升序排列。由于字符串是不可变的,因此我们需要先将字符串值转换为数组。为此,我们使⽤toCharArray()返回⼀个字符数组。
4. 现在,使⽤两个嵌套的for循环对数组的内容进⾏排序。在这⾥,在⽐较两个字符之前,我们将它们转换为⼩写字母,因为⼤写和⼩写字母的ASCII值都不同。
5. swapChars函数⽤于交换数组中的两个字符。它以字符在数组中的位置作为输⼊。
6. 最后,将排序后的字符串输出给⽤户。
样本输出:
Enter a string :
Alphabet
Sorted string Aabehlpt
Enter a string :
elephant
Sorted string aeehlnpt
不使⽤循环排序:
除了使⽤两个for循环,我们还可以像下⾯这样直接对字符数组进⾏排序:
import java.util.Arrays;
import java.util.Scanner;
class Main {
数组转换成字符串public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a string : ");
String userInput = Line();
char[] charArray = CharArray();
Arrays.sort(charArray);
System.out.println("Sorted string " + String.valueOf(charArray));
}
}
此⽅法的唯⼀问题是,它将⽆法对同时包含⼤写和⼩写字母的字符串进⾏排序。如果字符串仅是⼤写或⼩写,它将起作⽤。
例⼦ :
Elephant
Sorted string Eaehlnpt
Enter a string :
elephant
Sorted string aeehlnpt
Enter a string :
ELEPHANT
Sorted string AEEHLNPT
使⽤⽐较器:
我们可以改进上述程序,以⽐较所有⼤写和⼩写字符,如下所⽰:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a string : ");
String userInput = Line();
//1
Character[] charArray = new Character[userInput.length()];
for (int i = 0; i < userInput.length(); i++) {
charArray[i] = userInput.charAt(i);
}
//2
Arrays.sort(charArray, ComparatorparingInt(Character::toLowerCase));
StringBuilder sb = new StringBuilder(charArray.length);
for (Character c : charArray)
sb.append(c.charValue());
System.out.println("Sorted string " + sb.toString());
}
}
1. ⾸先,我们从字符串创建⼀个Character数组。
2. 然后,我们传递了⼀个lambda来⽐较第⼆个参数中的字符。lamda实际上如下所⽰:
Arrays.sort(charArray, new Comparator() {
@Override
public int compare(Character o1, Character o2) {
return LowerCase(o1),
}
});
最后,我们使⽤StringBuilder将数组转换为字符串。它将按预期排列字符。
例⼦ :
Enter a string :
Elephant
Sorted string aEehlnpt
使⽤Java Stream:
Java 8流API提供了⼀种解决此问题的漂亮⽅法。
import java.util.Comparator;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a string : ");
String userInput = Line();
String finalString =
Stream.of(userInput.split(""))
.sorted(ComparatorparingInt(o -> LowerCase(o.charAt(0)))) .collect(Collectors.joining());
System.out.println("Sorted string " + finalString);
}
}
在这⾥,我们在sorted()⽅法中使⽤了与上⾯相同的⽐较器。它将给出如下输出:
Enter a string :
Elephant
Sorted string aEehlnpt
结论 :
在Java中,我们已经看到了四种不同的⽅式来对字符串中的字符进⾏排序。实际上,第⼆种⽅法和第三种⽅法是相同的。您可以使⽤第三个⽽不是第⼆个来⽀持所有⼤写和⼩写字母。您要使⽤哪种⽅法取决于您的要求。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论