题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
import java.util.Scanner; import java.util.LinkedHashMap; import java.util.ArrayList; import java.util.Set; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String input = in.nextLine(); // LinkedHashMap用来存放非英文字母和它的初始位置 LinkedHashMap<Integer, Character> map = new LinkedHashMap<Integer, Character>(); // ArrayList用来存放英文字母,使用类冒泡排序进行排序(认为字母大小写相等) ArrayList<Character> list = new ArrayList<Character>(); for (int i = 0; i < input.length(); i++) { char tempCh = input.charAt(i); if ((tempCh >= 'A' && tempCh <= 'Z') || (tempCh >= 'a' && tempCh <= 'z')) { list.add(Character.valueOf(tempCh)); } else { map.put(Integer.valueOf(i), Character.valueOf(tempCh)); } } // System.out.println(list); //冒泡排序 int length = list.size(); for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - 1 - i; j++) { Character tempC = null; if (compare(list.get(j), list.get(j + 1)) > 0) { tempC = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, tempC); } } } // System.out.println(list); // System.out.println(map); Set<Integer> TS = map.keySet(); for (Integer i : TS) { int n = i.intValue(); list.add(n, map.get(i)); } // System.out.println(list); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)); } } } // 比较两个字母大小,c1>c2,返回正数,c1=c2,返回0,c1<c2,返回负数 //规定 A=a A<b B>a a<C public static int compare(Character c1, Character c2) { int result; char ch1 = c1.charValue(); char ch2 = c2.charValue(); //将小写字符转换为大写字符 if (ch1 >= 'a' && ch1 <= 'z') { ch1 = (char)(ch1 - 32); } if (ch2 >= 'a' && ch2 <= 'z') { ch2 = (char)(ch2 - 32); } return ch1 - ch2; } }