java-字符统计及重排

标题:字符统计及重排
【字符统计及重排】给出⼀个仅包含字⺟的字符串,不包含空格,统计字符串中各个字⺟(区分⼤⼩写)出现的次数,并按照字⺟出现次数从⼤到⼩的顺序输出各个
字⺟及其出现次数。如果次数相同,按照⾃然顺序进⾏排序,且⼩写字⺟在⼤写字⺟之前。
输⼊描述:

输⼊⼀⾏,为⼀个仅包含字⺟的字符串。

输出描述:

按照字⺟出现次数从⼤到⼩的顺序输出各个字⺟和字⺟次数,⽤英⽂分号分隔,注意末尾的分号;字⺟和次数间⽤英⽂冒号分隔。

示例1:
输入

xyxyXX

输出

x:2;y:2;X:2

import java.util.*;

public class T {
    public static void main(String[] args) {
        String s = "xxxxxcyyddABABABABCCCCC";
       Map<Character,Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            if(!map.containsKey(s.charAt(i))){
               map.put(s.charAt(i),1);
            }else
                map.put(s.charAt(i),map.get(s.charAt(i))+1);
        }

        List< Map.Entry<Character,Integer>> list = new ArrayList<>(map.entrySet());
        System.out.println(list);
        Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> m1, Map.Entry<Character, Integer> m2) {
                if( m1.getValue() ==  m2.getValue() ){
                    if((int) m1.getKey() > 97 &&  (int) m2.getKey() < 92){
                        return m2.getKey() - m1.getKey();
                    }
                    return m1.getKey()-m2.getKey();

                }
                return m2.getValue() - m1.getValue();
            }
        });
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < list.size()-1; i++) {
            sb.append(list.get(i).getKey()).append(":").append(list.get(i).getValue()).append(";");
        }
        sb.append(list.get(list.size()-1).getKey()).append(":").append(list.get(list.size()-1).getValue());
        System.out.println(sb.toString());
    }

}

输出结果:

x:5;C:5;A:4;B:4;d:2;y:2;c:1

猜你喜欢

转载自blog.csdn.net/weixin_39772200/article/details/107735450