举例:比如,输入 kkddpppp00j09933
输出:
p:4
0:3
k:2
d:2
3:2
j:1
思路:1.使用map集合保存每个字符出现的数量,后续需要根据出现的数量进行降序排列(排序)
2.集合排序:对list集合排序 Collections.sort(list,Comparator)
3.将map集合中的k-v数据保存到list集合中,从而对list排序
1 import java.util.*;
2
3 /**
4 * 统计字符串中字符出现的次数并按照次数降序输出
5 */
6 public class CountCharDemo {
7 public static void main(String[] args) {
8 Scanner scanner = new Scanner(System.in);
9 System.out.println("请输入任意字符串");
10 String str = scanner.next();
11 //转换得到字符数组表示
12 char[] chs = str.toCharArray();
13 //创建Map集合保存字符出现的次数
14 Map<Character,Integer> map = new HashMap<>();
15 //遍历字符数组,判断字符是否出现在map中,若出现,则次数+1,
16 //否则将字符存入map,并将次数设为1
17 for (char c:chs) {
18 if(map.containsKey(c)){
19 map.put(c,map.get(c)+1);
20 }else {
21 map.put(c,1);
22 }
23 }
24 // map.forEach((k,v)-> System.out.println(k+"-"+v));
25 //对map中的键值对数据根据value(次数)降序排列
26 //将map中的所有k-v数据存入list,然后对list排序即可
27 List<Map.Entry<Character,Integer>> list =
28 new ArrayList<>(map.entrySet());
29 Collections.sort(list,
30 new Comparator<Map.Entry<Character, Integer>>() {
31 @Override
32 public int compare(Map.Entry<Character, Integer> o1,
33 Map.Entry<Character, Integer> o2) {
34 return o2.getValue()-o1.getValue();
35 }
36 });
37 //遍历list
38 for (Map.Entry<Character,Integer> entry:list) {
39 System.out.println(entry);
40 }
41 }
42 }