题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
把大小写字母摘取出来进行排序,非字母保留在原处以保证其位置不变,然后将排序后的大小写字母重新插入回原来的空位
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); char[] arr = sc.nextLine().toCharArray(); StringBuilder sb = new StringBuilder(); //摘取大小写字母,非字母保留在原处,保证其位置不变 for (int i = 0; i < arr.length; ++i) { if (Character.isLetter(arr[i])) { sb.append(arr[i]); } } //对只含有大小写字母的字符串进行排序 char[] letter = sortLetter(sb.toString()); //如果是非字母,就输出原字符;如果是字母,就输出排序后的字母 for (int i = 0, j = 0; i < arr.length; ++i) { if (Character.isLetter(arr[i])) { System.out.print(letter[j]); ++j; } else { System.out.print(arr[i]); } } } //对只含有大小写字母的字符串进行排序 public static char[] sortLetter(String s) { char[] a = s.toCharArray(); for (int i = 0; i < a.length; ++i) { for (int j = a.length - 1; j > i; --j) { //此处比较用<而非<=,以保证同一个英文字母的大小写同时存在时,按照原顺序排列 if (Character.toLowerCase(a[j]) < Character.toLowerCase(a[j - 1])) { char temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } } } return a; } }
}