题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
import java.util.*; import java.lang.String; import java.util.ArrayList; import java.util.Arrays; import java.lang.*; import java.util.HashSet; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String s = in.nextLine(); HashSet<String> hs0 = new HashSet<>();//存放字母字符用于排序 ArrayList<Integer> ho=new ArrayList<>();//存放输入串中非字母字符的下标值 for(int i=0;i<s.length();i++ ){ String si = Character.toString(s.charAt(i)); if(!si.matches("[a-zA-Z]")){ ho.add(i); }else{ hs0.add(si.toUpperCase());//统一转换成大写字母存入 } } Object[] hso=hs0.stream().sorted().toArray();//对输入串中出现过的字母字符进行排序 //构造字符串,将输入串中的字母字符重新排序 StringBuilder sb = new StringBuilder(); for(int k=0;k<hso.length;k++){ char[] sa=s.toCharArray(); String sok=(String)hso[k]; //通过循环,每次取一个字母,将输入串中包含该字母(无论大小写)的字符放入构造的字符串 for(int v=0;v<sa.length;v++){ String sav=Character.toString(sa[v]); if(sav.equals(sok)||sav.equals(sok.toLowerCase())){ sb.append(sav); } } } //将非字母字符按照原来的位置插入已构造的字符串中 for(int n=0;n<ho.size();n++){ int ind=ho.get(n); sb.insert(ind,s.charAt(ind)); } System.out.println(sb.toString()); } } }