题解 | #字符串排序#

字符串排序

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());           
            
        }
    }
}

全部评论

相关推荐

_mos_:我以为手抄报简历就已经很顶了,没想到还有表格简历
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务