在Java中对字符串进行排序(2 种不同的方式)
String 类没有任何直接对字符串进行排序的方法,但我们可以通过依次应用其他方法来对字符串进行排序。字符串是一个字符序列。在Java中, String 的对象是不可变的,这意味着一个常量,一旦创建就不能更改。
创建字符串
在Java中创建字符串有两种方法:
- 字符串字面量
String s = “GeeksforGeeks”;
- 使用新关键字
String s = new String (“GeeksforGeeks”);
Note: As we know that String is immutable in java, hence in third step we have to create a new string.
方法:
有两种方法可以按字母顺序对Java中的任何字符串进行排序
- 不使用 sort() 方法
- 使用sort() 方法
插图:
Input string : "geeksforgeeks"
Output string : "eeeefggkkorss"
现在让我们讨论方法并实现相同的方法。
方法一:不使用 sort() 方法
在这里,我们将提出一种方法来对字符串进行排序,而不使用任何预定义的逻辑。因此,从面试的角度来看,它也确实成为一种重要的方法。
程序:
- 借助 String 类的 toCharArray() 方法将字符串转换为数组
- 现在使用嵌套循环来检查数组的交换元素。
- 打印这些字符数组元素。
例子
Java
// Java program to Sort a String Alphabetically
// Using toCharArray() method
// Without using sort() method
// Importing required classes
import java.io.*;
import java.util.Arrays;
// Main class
class GFG {
// Main driver method
public static void main(String[] args) throws Exception
{
// Custom string input
String str = "geeksforgeeks";
// Converting string into an array for computation
char arr[] = str.toCharArray();
// Nested loops for comparison of characters
// in above character array
char temp;
int i = 0;
while (i <= arr.length) {
int j = i + 1;
while (j <= arr.length) {
if (arr[j] < arr[i]) {
// Comparing the characters one by one
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
j += 1;
}
i += 1;
}
// By now loop is done means we have
// iterated the whole array
System.out.println(arr);
}
}
Java
// Java program to Sort a String Alphabetically
// Using toCharArray() method
// With using the sort() method
// Importing Arrays class from java.util package
import java.util.Arrays;
// Main class
public class GFG {
// Method 1
// To sort a string alphabetically
public static String sortString(String inputString)
{
// Converting input string to character array
char tempArray[] = inputString.toCharArray();
// Sorting temp array using
Arrays.sort(tempArray);
// Returning new sorted string
return new String(tempArray);
}
// Method 2
// Main driver method
public static void main(String[] args)
{
// Custom string as input
String inputString = "geeksforgeeks";
String outputString = sortString(inputString);
// Print and display commands
// Input string
System.out.println("Input String : " + inputString);
// Output string
System.out.println("Output String : "
+ outputString);
}
}
Java
// Java Program to Sort a Mixed String Containing
// Uppercase and Lowercase Characters
// Importing required classes
import java.util.Arrays;
import java.util.Comparator;
// Main class
class GFG {
// Method 1
// To sort a mixed string
public static String sortString(String inputString)
{
// Converting input string to Character array
Character tempArray[]
= new Character[inputString.length()];
for (int i = 0; i < inputString.length(); i++) {
tempArray[i] = inputString.charAt(i);
}
// Sort, ignoring case during sorting
Arrays.sort(tempArray, new Comparator() {
// Method 2
// To compare characters
@Override
public int compare(Character c1, Character c2)
{
// Ignoring case
return Character.compare(
Character.toLowerCase(c1),
Character.toLowerCase(c2));
}
});
// Using StringBuilder to convert Character array to
// String
StringBuilder sb
= new StringBuilder(tempArray.length);
for (Character c : tempArray)
sb.append(c.charValue());
return sb.toString();
}
// Method 3
// MAin driver method
public static void main(String[] args)
{
// Custom input string
String inputString = "GeeksforGeeks";
// Calling method 1 to sort input string
// and storing in a string
String outputString = sortString(inputString);
// Print and display the input and output strings
System.out.println("Input String : " + inputString);
System.out.println("Output String : "
+ outputString);
}
}
输出:
eeeefggkkorss
方法 2:使用sort() 方法
2A使用sort() 方法 -自然排序
程序:
- 主要逻辑是 String 类的toCharArray() 方法在输入字符串上创建输入字符串的字符数组。
- 现在使用 Arrays.sort(char c[])方法对字符数组进行排序。
- 使用 String 类构造函数从 char 数组创建排序字符串。
示例 1
Java
// Java program to Sort a String Alphabetically
// Using toCharArray() method
// With using the sort() method
// Importing Arrays class from java.util package
import java.util.Arrays;
// Main class
public class GFG {
// Method 1
// To sort a string alphabetically
public static String sortString(String inputString)
{
// Converting input string to character array
char tempArray[] = inputString.toCharArray();
// Sorting temp array using
Arrays.sort(tempArray);
// Returning new sorted string
return new String(tempArray);
}
// Method 2
// Main driver method
public static void main(String[] args)
{
// Custom string as input
String inputString = "geeksforgeeks";
String outputString = sortString(inputString);
// Print and display commands
// Input string
System.out.println("Input String : " + inputString);
// Output string
System.out.println("Output String : "
+ outputString);
}
}
输出
Input String : geeksforgeeks
Output String : eeeefggkkorss
2B使用sort() 方法 -自定义排序
Arrays.sort(char c[]) method sort characters based on their ASCII value, we can define our custom Comparator to sort a string.
插图:
Input String : GeeksforGeeks
Output String : eeeefGGkkorss
程序:
- 将输入字符串转换为字符数组。没有直接的方法可以做到这一点。我们将使用 for 循环来填充数组。
- 使用Arrays.sort(T [ ], Comparator c)方法对字符数组进行排序。为此,我们必须根据我们的自定义排序行为实现compare()方法。
- 现在我们可以使用 StringBuilder 将字符数组转换为 String。
示例 2
Java
// Java Program to Sort a Mixed String Containing
// Uppercase and Lowercase Characters
// Importing required classes
import java.util.Arrays;
import java.util.Comparator;
// Main class
class GFG {
// Method 1
// To sort a mixed string
public static String sortString(String inputString)
{
// Converting input string to Character array
Character tempArray[]
= new Character[inputString.length()];
for (int i = 0; i < inputString.length(); i++) {
tempArray[i] = inputString.charAt(i);
}
// Sort, ignoring case during sorting
Arrays.sort(tempArray, new Comparator() {
// Method 2
// To compare characters
@Override
public int compare(Character c1, Character c2)
{
// Ignoring case
return Character.compare(
Character.toLowerCase(c1),
Character.toLowerCase(c2));
}
});
// Using StringBuilder to convert Character array to
// String
StringBuilder sb
= new StringBuilder(tempArray.length);
for (Character c : tempArray)
sb.append(c.charValue());
return sb.toString();
}
// Method 3
// MAin driver method
public static void main(String[] args)
{
// Custom input string
String inputString = "GeeksforGeeks";
// Calling method 1 to sort input string
// and storing in a string
String outputString = sortString(inputString);
// Print and display the input and output strings
System.out.println("Input String : " + inputString);
System.out.println("Output String : "
+ outputString);
}
}
输出
Input String : GeeksforGeeks
Output String : eeeefGGkkorss
Note:
public int compare(Object o1, Object o2) {}
- have to return -ve if o1 has to come before o2
- have to return +ve if o1 has to come after o2
- have to return 0 if o1 is equal to o2