题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String str = in.nextLine();
        char[] charArr = new char[str.length()];
        // 纯字母
        ArrayList<Character> list = new ArrayList<>();
        // 初始化
        for (int i = 0; i < str.length(); i++) {
            char t = str.charAt(i);
            if ((t >= 'a' && t <= 'z') || (t >= 'A' && t <= 'Z')) {
                list.add(t);
            } else {
                charArr[i] = t;
            }
        }
        // 排序子母
        Collections.sort(list, new Comparator<Character>() {
            @Override
            public int compare(Character o1, Character o2) {
                // 大小
                if ((o1 >= 'A' && o1 <= 'Z') && (o2 >= 'a' && o2 <= 'z')) {
                    Character t = Character.toLowerCase(o1);
                    return t.compareTo(o2);
                }// 小大
                else if ((o1 >= 'a' && o1 <= 'z') && (o2 >= 'A' && o2 <= 'Z')) {
                    Character t = Character.toLowerCase(o2);
                    return o1.compareTo(t);
                }// 同大或同小
                else {
                    return o1.compareTo(o2);
                }
            }
        });
        int index = 0;
        for (int i = 0; i < str.length(); i++) {
            if ((int)charArr[i] != 0) {
                System.out.print(charArr[i]);
            } else {
                System.out.print(list.get(index));
                index++;
            }
        }
    }
}

全部评论

相关推荐

运营你豪哥:简历改改吧-非本、求职意向技术岗、无实习经历、内容空洞 如果简历不爆改的话,应该是会持续崩溃了 1.把你教育经历放最下面去 2.蓝底照片很奇怪哈,感觉还在高中时代,建议白底重新拍一下 3.校园经历没啥必要,收集和反馈同学们对产品的意见,解决学生和老师之间的沟通,企业招聘不看这些哈 好好思考一下简历的设计和你要表达的重点,再去投简历
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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