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();
    }
    }

    }

    欢迎诸位指导。

  • 相关阅读:
    kerberos
    BZOJ 3309 莫比乌斯反演
    Pollard_rho定理 大数的因数个数 这个板子超级快
    POJ 3171 区间覆盖最小值&&线段树优化dp
    拼题 L2-001 紧急救援 最短路计数+记录路径
    HDU 6464 权值线段树 && HDU 6468 思维题
    HDU 1394 线段树求逆序对
    [Poi2010]Bridges 最大流+二分答案 判定混合图欧拉回路
    01背包 多重背包 复习 模板
    CF 2018 Battle of Brains GYM 102062 F
  • 原文地址:https://www.cnblogs.com/zhishifx/p/7219125.html
Copyright © 2011-2022 走看看