A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

从键盘接收一行字符串, 统计每个字符出现的次数
按照字符出现的个数排序, 次数相同的按照字典顺序排序: a=1, d=1, c=2, b=3
  1. import java.util.Comparator;
  2. import java.util.Map;
  3. import java.util.Map.Entry;
  4. import java.util.Scanner;
  5. import java.util.Set;
  6. import java.util.TreeMap;
  7. import java.util.TreeSet;

  8. public class abc {
  9.         public static void main(String[] args) {
  10.                 Scanner sc = new Scanner(System.in);
  11.                 String str = sc.nextLine();
  12.                 sc.close();
  13.                 sortByCount(str);

  14.         }

  15.         private static void sortByCount(String str) {
  16.                 char[] arr = str.toCharArray();// 字符串装换为字符数组
  17.                 Map<Character, Integer> map = new TreeMap<>();
  18.                 putInMap(arr, map);//将键 和值装入集合
  19.                
  20.                 // 获取键值对,封装到Entry中,然后将Entry对象添加到TreeSet集合中,TreeSet中传一个比较器.
  21.                 Set<Entry<Character, Integer>> entrySet = map.entrySet();
  22.                 TreeSet<Entry<Character, Integer>> ts = new TreeSet<>(
  23.                                 new Comparator<Entry<Character, Integer>>() {
  24.                                         @Override
  25.                                         public int compare(Entry<Character, Integer> e1,
  26.                                                         Entry<Character, Integer> e2) {
  27.                                                 int num = e2.getValue() - e1.getValue();
  28.                                                 return num == 0 ? e1.getKey().compareTo(e2.getKey())
  29.                                                                 : num;
  30.                                         }
  31.                                 });
  32.                 ts.addAll(entrySet);
  33.                 System.out.println(ts);
  34.         }

  35.         private static void putInMap(char[] arr, Map<Character, Integer> map) {
  36.                 for (Character ch : arr) {
  37.                         map.put(ch, map.get(ch) == null ? 1 : map.get(ch) + 1);
  38.                 }
  39.         }
  40. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
不错,值得学习~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马