zoukankan      html  css  js  c++  java
  • 读取一个文件,获取其中出现次数最多的前五个字符以及次数

    近期遇到这个题目的时候,大致思路是有就是读取文件,字符串转字符数组,排除重复的内容比较次数,结果问题就卡到这里,忘记使用map的键值对的特性,以及Collections.sort和Collections.reverse两个方法。为了方便以后的使用,就把解决方法完成到这里,但是这里读取文件时空格也是在统计内,且中文没有做处理。

    具体的代码如下:

    public class Qu {
    public static void main(String[] args) {
    demo(new File("F:\qu\a.txt"));
    }

    public static void demo(File file) {
    BufferedReader bfr = null;
    try {
    bfr = new BufferedReader(new FileReader(file));//读文件
    String strs = null, str = null;
    while ((str = bfr.readLine()) != null) {
    strs = strs + str;
    }
    char[] ch = strs.toCharArray();//读到的字符串,转为字符数组
    TreeMap<Character, Integer> map = new TreeMap<Character, Integer>(
    Collections.reverseOrder()); //将字符数组放入Map对象集合中,字符作为键,出现的次数作为值
    for (int i = 0; i < ch.length; i++) {
    char c = ch[i];
    if (map.containsKey(c)) {
    int count = map.get(c);
    map.put(c, count + 1);
    } else {
    map.put(c, 1);
    }

    }
    /*//遍历Map集合
    Set<Map.Entry<Character, Integer>> set = map.entrySet();
    java.util.Iterator<Entry<Character, Integer>> iterator = set
    .iterator();
    while (iterator.hasNext()) {
    Map.Entry<Character, Integer> m = iterator.next();
    char k = m.getKey();
    int v = m.getValue();
    System.out.println(k + "---" + v);
    }*/
    List<Entry<Character, Integer>> list = new ArrayList<Entry<Character, Integer>>(
    map.entrySet());
    Collections.sort(list,
    new Comparator<Map.Entry<Character, Integer>>() {
    // 升序排序
    public int compare(Entry<Character, Integer> o1,
    Entry<Character, Integer> o2) {
    return o1.getValue().compareTo(o2.getValue());
    }
    });
    Collections.reverse(list);//反转,List有升序变为降序
    for (Entry<Character, Integer> e : list) {
    System.out.println(e.getKey() + ":" + e.getValue());
    }
    System.out.println("前五条数据");
    list = list.subList(0, 5);//截取子List,读取前五个字符以及出现的次数
    for (Entry<Character, Integer> e : list) {
    System.out.println(e.getKey() + ":" + e.getValue());
    }
    } catch (FileNotFoundException e) {
    System.out.println("找不到文件!");
    e.printStackTrace();
    } catch (IOException e) {
    System.out.println("文件读取错误!");
    e.printStackTrace();
    }
    }

    }

    欢迎诸位指导。

  • 相关阅读:
    Laravel 初始化
    ant design pro 左上角 logo 修改
    请求到服务端后是怎么处理的
    Websocket 知识点
    王道数据结构 (7) KMP 算法
    王道数据结构 (6) 简单的模式匹配算法
    王道数据结构 (4) 单链表 删除节点
    王道数据结构 (3) 单链表 插入节点
    王道数据结构 (2) 单链表 尾插法
    王道数据结构 (1) 单链表 头插法
  • 原文地址:https://www.cnblogs.com/zhishifx/p/7219125.html
Copyright © 2011-2022 走看看