zoukankan      html  css  js  c++  java
  • 统计字符串中各字符出现的频率并按要求打印

    给出一个字符串str,要求按照字符出现的频率,降序打印出来,比如如下结果:

    输入:ahinfhhaaahgiajrbgjbsgbaa

    输出:aaaaaaahhhhbbbgggiijjrsfn

    ======================================================

    在统计字符串出现的频率时,我们很容易便想到利用Map:Map中的key可以用来存放出现的字符,value可以用来记录对应的key出现的次数。难点便是,如何去对Map中的value进行降序排序,并且打印key。

    我个人的话是忘了Map中是否有方法可以直接对value进行排序的了,所以只能利用List来对Map的Entry进行排序。求得结果之后,才按照顺序把对应的key打印出来。其中我们在利用List进行排序时,需要实现Comparator接口,重写compare方法。

    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String str = "";
            System.out.println("请输入字符串:");
            str = sc.nextLine();
            printString(str);
        }
        
        public static void printString(String str) {
            char[] ch = str.toCharArray();
            Map<Character, Integer> map = new HashMap<>();
            for(char c : ch) {
                if(map.containsKey(c)) {
                    int k = map.get(c) + 1;
                    map.put(c, k);
                }else {
                    map.put(c, 1);
                }
            }
            List<Map.Entry<Character, Integer>> list = new ArrayList<>();
            for(Map.Entry<Character, Integer> entry : map.entrySet()) {
                list.add(entry);
            }
            Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>(){
                public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                    return o2.getValue() - o1.getValue();
                }
            });
            for(Map.Entry<Character, Integer> me : list) {
                int counts = 0;
                while(counts < me.getValue()) {
                    System.out.print(me.getKey());
                    counts++;
                }
            }
        }
    
    }

    代码执行结果如下:

  • 相关阅读:
    SQL“多字段模糊匹配关键字查询”[转载] Virus
    [转载]分页存储过程 Virus
    质因数 Virus
    由传值引发的思考 Virus
    RFID票务系统调研报告 Virus
    以人为中心还是以事为中心 Virus
    IOC容器 Virus
    [导入]数据库设计三大范式应用实例剖析 Virus
    电子商务B2B调研报告 Virus
    心情不是太好 Virus
  • 原文地址:https://www.cnblogs.com/WakingShaw/p/13587868.html
Copyright © 2011-2022 走看看