字符串排序

字符串排序

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);
        }
    } 
}
全部评论
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
想法真好,记不住comparator重写方法的同学可以用lambda表达式:Collections.sort(list, (a, b)-> Character.toLowerCase(a) - Character.toLowerCase(b));
2 回复 分享
发布于 2023-02-20 09:23 美国
思路清晰,妙哉
1 回复 分享
发布于 2022-03-08 12:11
一直想不到如何处理 相同单词大小写按照出现顺序来,原理忽略大小写排序就行了 我怎么就没想到呢
1 回复 分享
发布于 2022-07-13 09:54
秒,这里精妙的地方在比较这里要怎么记录大写转成小写之后的位置,如果用比较完之后还原就不用解决位置问题了,困扰我一个小时没想出来
1 回复 分享
发布于 2022-12-21 22:34 广东
sort(list,String::compareToIgnoreCase);
1 回复 分享
发布于 2022-12-23 16:26 广东
result.append(letters.get(j++)); 这里为什么是j++啊我想不明白
1 回复 分享
发布于 2023-04-01 10:20 上海
秒啊
点赞 回复 分享
发布于 2022-03-08 08:32
diao
点赞 回复 分享
发布于 2022-03-15 10:20
妙啊
点赞 回复 分享
发布于 2022-03-29 22:03
可以的,思路清晰
点赞 回复 分享
发布于 2022-04-29 19:49
妙啊
点赞 回复 分享
发布于 2022-05-27 13:33
太强了,没想到不改变ArrayList内的元素,就能直接改变ArrayList的排序规则,这个List的sort方法实在是很少用到,今天才理解到还能这么玩,学到了
点赞 回复 分享
发布于 2022-06-15 19:43
为什么 if (Character.isLetter(str.charAt(i))) { result.append(letters.get(j++)); } 这里取的是j++ 而不是i
点赞 回复 分享
发布于 2022-07-21 17:07
感谢
点赞 回复 分享
发布于 2022-08-02 03:36
思路很清晰,点个赞!
点赞 回复 分享
发布于 2022-08-05 18:26
厉害了,之前没想到可以这样排序… isLettet()、compare()排序逻辑,之前都用的很少,完全没用这几个方法的思想
点赞 回复 分享
发布于 2022-10-02 11:07 四川
优雅,太优雅了,clean code
点赞 回复 分享
发布于 2022-10-19 17:23 北京

相关推荐

02-05 08:49
已编辑
武汉大学 Web前端
野猪不是猪🐗:36k和36k之间亦有差距,ms的36k和pdd的36k不是一个概念
点赞 评论 收藏
分享
评论
267
70
分享

创作者周榜

更多
牛客网
牛客企业服务