码迷,mamicode.com
首页 > 其他好文 > 详细

统计单词个数

时间:2018-10-11 23:55:35      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:文本   表达   pre   pac   png   res   int   txt   string   

源代码:

    package 统计单词;

    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 统计单词 {    
            public static void main(String[] args) throws Exception {
                BufferedReader reader = new BufferedReader(new FileReader(
                        "D:\\123.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;
                for (int i = last; i > last - 5; i--) {
                    String key = list.get(i).getKey();
                    Integer value = list.get(i).getValue();
                    System.out.println(key + " :" + value);
                }
            }
        }

结果显示
技术分享图片

感悟:又是一样的迷茫,又是一样的无助,最后还是借助CSDN中的大佬的代码,而且还有很多地方看不懂。还是需要多写多看

整体思路是先读取文本文档,然后检索内容,重复的单词就数量加1,最后输出个数多的单词。

 

统计单词个数

标签:文本   表达   pre   pac   png   res   int   txt   string   

原文地址:https://www.cnblogs.com/2205254761qq/p/9775437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!