• 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。


    package test1;

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    import java.util.Map;
    import java.util.TreeMap;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class WordCount {
    public static void main(String[] args) throws Exception {

    long time1 = System.currentTimeMillis();
    BufferedReader reader = new BufferedReader(new FileReader(
    "D:\wordtest.txt"));
    StringBuffer buffer = new StringBuffer();
    String line = null;
    while ((line = reader.readLine()) != null) {
    buffer.append(line);
    }
    reader.close();
    Pattern expression = Pattern.compile("[a-zA-Z]+");// 定义正则表达式匹配单词
    String string = buffer.toString();
    Matcher matcher = expression.matcher(string);//
    Map<String, Integer> map = new TreeMap<String, Integer>();
    String word = "";
    int times = 0;
    while (matcher.find()) {// 是否匹配单词
    word = matcher.group();// 得到一个单词-树映射的键
    if (map.containsKey(word)) {// 如果包含该键,单词出现过
    times = map.get(word);// 得到单词出现的次数
    map.put(word, times + 1);
    } else {
    map.put(word, 1);// 否则单词第一次出现,添加到映射中
    }
    }
    /*
    * 核心:如何按照TreeMap 的value排序而不是key排序.将Map.Entry放在集合里,重写比较器,在用
    * Collections.sort(list, comparator);进行排序
    */

    List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(
    map.entrySet());
    /*
    * 重写比较器
    * 取出单词个数(value)比较
    */
    Comparator<Map.Entry<String, Integer>> comparator = new Comparator<Map.Entry<String, Integer>>() {
    public int compare(Map.Entry<String, Integer> left,
    Map.Entry<String, Integer> right) {
    return (left.getValue()).compareTo(right.getValue());
    }
    };
    Collections.sort(list, comparator);// 排序
    // 打印
    int last = list.size() - 1;
    try{
    for (int i = last; i > last-10; i--) {
    String key = list.get(i).getKey();
    Integer value = list.get(i).getValue();
    System.out.print("Top"+i+" : ");
    System.out.println(key + " " + value);
    }
    }catch(Exception e){
    //System.out.println("");
    }
    long time2 = System.currentTimeMillis();
    System.out.print("耗时:");
    System.out.println(time2 - time1+"ms");
    }
    }

  • 相关阅读:
    4-8 求二叉树高度 (20分)
    汉诺塔的递归和非递归实现
    5-18 银行业务队列简单模拟 (25分)
    ACM 刷题小技巧【转】
    5-21 求前缀表达式的值(25分)
    5-20 表达式转换 (25分)
    约瑟夫环----循环链表问题
    关于埃拉托色尼筛选法的整理(质数问题)
    编码---隐藏在计算机软硬件背后的语言
    内排序和外排序扫盲
  • 原文地址:https://www.cnblogs.com/qfxblog/p/5309190.html
Copyright © 2020-2023  润新知