题目描述
给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数
并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。
如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前,
输入描述
输入一行,为一个仅包含字母的字符串,
输出描述
按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分隔,注意未尾的分号;
字母和次数间用英文冒号分隔。
//xyxyXX
//aaaaAAAAbbbbcccckkk
public class 字符统计及重排 {
public static void main(String[] args) {
//获取控制台信息
Scanner scanner = new Scanner(System.in);
char[] chars = scanner.nextLine().toCharArray();
// 处理数据
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
map.put(c, map.getOrDefault(c,0)+1);
}
map.entrySet().stream().sorted((o1, o2) -> {
if (!o1.getValue().equals(o2.getValue())){
return o2.getValue() - o1.getValue();
}else {
return (Character.isUpperCase(o1.getKey()) ? o1.getKey()+100 : o1.getKey()) - (Character.isUpperCase(o2.getKey()) ? o2.getKey()+100 : o2.getKey());
}
}).forEach((entry -> System.out.print(entry.getKey() + ":" + entry.getValue() + ";")));
}
}