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

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

  • 相关阅读:
    求助:多个参数的存储过程
    经典回顾:哲学家进餐问题(The Dinning Philosophers Problem)
    杨辉三角
    开发公共课选修系统之二
    关于即时消息系统
    用户 'NT AUTHORITY/NETWORK SERVICE' 登录失败 的解决方法(转)
    细说反射API
    东莞哪家公司可以提供实习的机会?
    使用Gmail发送email时出现Must issue a STARTTLS command first错误!!
    Revolution
  • 原文地址:https://www.cnblogs.com/qfxblog/p/5309190.html
Copyright © 2011-2022 走看看