字符串排序

字符串排序

http://www.nowcoder.com/questionTerminal/5190a1db6f4f4ddb92fd9c365c944584

  • StringBuilder and Comparator, 简单地忽略大小写排个序即可
import java.util.*;

public class Main {

    public static String sort(String str) {
        // 先将英文字母收集起来
        List<Character> letters = new ArrayList<>();
        for (char ch : str.toCharArray()) {
            if (Character.isLetter(ch)) {
                letters.add(ch);
            }
        }
        // 将英文字母先排序好
        letters.sort(new Comparator<Character>() {
            public int compare(Character o1, Character o2) {
                return Character.toLowerCase(o1) - Character.toLowerCase(o2);
            }
        });
        // 若是非英文字母则直接添加
        StringBuilder result = new StringBuilder();
        for (int i = 0, j = 0; i < str.length(); i++) {
            if (Character.isLetter(str.charAt(i))) {
                result.append(letters.get(j++));
            }
            else {
                result.append(str.charAt(i));
            }
        }
        return result.toString();
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String str = in.nextLine();
            String res = sort(str);
            System.out.println(res);
        }
    } 
}
全部评论
想法真好,记不住comparator重写方法的同学可以用lambda表达式:Collections.sort(list, (a, b)-> Character.toLowerCase(a) - Character.toLowerCase(b));
3 回复 分享
发布于 2023-02-20 09:23 美国
letters.sort(new Comparator<character>() { public int compare(Character o1, Character o2) { return Character.toLowerCase(o1) - Character.toLowerCase(o2); } }); 可以使用下面一句替换 letters.sort(Comparator.comparing(Character::toLowerCase));</character>
3 回复 分享
发布于 2022-05-06 21:59
有相同英文按照输入排序 这个有考虑么 这个没看懂
2 回复 分享
发布于 2022-03-18 18:52
result.append(letters.get(j++)); 这里为什么是j++啊我想不明白
1 回复 分享
发布于 2023-04-01 10:20 上海
sort(list,String::compareToIgnoreCase);
1 回复 分享
发布于 2022-12-23 16:26 广东
秒,这里精妙的地方在比较这里要怎么记录大写转成小写之后的位置,如果用比较完之后还原就不用解决位置问题了,困扰我一个小时没想出来
1 回复 分享
发布于 2022-12-21 22:34 广东
一直想不到如何处理 相同单词大小写按照出现顺序来,原理忽略大小写排序就行了 我怎么就没想到呢
1 回复 分享
发布于 2022-07-13 09:54
思路清晰,妙哉
1 回复 分享
发布于 2022-03-08 12:11
C++ 码员表示一脸懵逼。。。有没有java佬告诉我这是怎么保证相同字母按照输入顺序的
点赞 回复 分享
发布于 05-14 23:35 宁夏
不是说同一个英文字母的大小写同时存在时,按照输入顺序排列,为什么楼主按字母排序时全转化成小写排序了?
点赞 回复 分享
发布于 2023-10-24 19:14 北京
请问一下,List.sort方法底层是使用Arrays的快速排序进行排序的而且快速排序是一种不稳定的排序算法,怎么可以保证aA或者bB的顺序是按照输入的顺序排序呢
点赞 回复 分享
发布于 2023-04-10 15:01 江苏
同一个英文字母的大小写同时存在时,按照输入顺序排列.原来忽略大小写排序就可以了吗?高手啊!
点赞 回复 分享
发布于 2023-03-20 16:23 陕西
同志们,咨询一下在线敲像Character.isLetter、new Comparator<character>()你们都纯手打的吗?导了包也不提示,死记硬背啊?</character>
点赞 回复 分享
发布于 2023-03-14 20:38 浙江
厉害
点赞 回复 分享
发布于 2023-02-01 10:44 江苏
优雅
点赞 回复 分享
发布于 2023-01-17 10:22 上海
厉害了
点赞 回复 分享
发布于 2023-01-10 17:53 陕西
字母排序那里有个致命的缺点,万一机考的时候记不起来Comparator类用法就完犊子了。
点赞 回复 分享
发布于 2022-12-22 11:45 广东
为啥在线运行提示编译错误
点赞 回复 分享
发布于 2022-12-13 20:49 新疆
妙啊~
点赞 回复 分享
发布于 2022-12-01 11:18 广东
优雅,太优雅了,clean code
点赞 回复 分享
发布于 2022-10-19 17:23 北京

相关推荐

评论
284
71
分享

创作者周榜

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