zoukankan      html  css  js  c++  java
  • 单词频率代码测试

    package 单词频率2;
    import java.io.*;
    import java.util.*;
    import java.util.Map.Entry;
    public class find {
     public static void main(String[] args) {
      long t1 = System.currentTimeMillis();
      String s;
      String fileName1 = "C:\Users\陈阳阳\eclipse-workspace\课上练习\folder\哈利波特.txt";
      String fileName2 = "C:\Users\陈阳阳\eclipse-workspace\课上练习\folder\out.txt";
      try {
       BufferedReader br = new BufferedReader(new FileReader(fileName1));
       BufferedWriter bw = new BufferedWriter(new FileWriter(fileName2));
       StringBuffer sb = new StringBuffer();
       //将文件内容存入StringBuffer中
       while((s = br.readLine()) != null) {
        sb.append(s);
       }
       String str = sb.toString().toLowerCase();
       //分隔字符串并存入数组
       String[] elements = str.split("[^a-zA-Z0-9]+");
       int count = 0;
       Map<String, Integer> myTreeMap = new TreeMap<String, Integer>();
       //遍历数组将其存入Map<String, Integer>中
       for(int i = 0; i < elements.length; i++) {
        if(myTreeMap.containsKey(elements[i])) {
         count = myTreeMap.get(elements[i]);
         myTreeMap.put(elements[i], count + 1);
        }
        else {
         myTreeMap.put(elements[i], 1);
        }
       }                                          
       System.out.println("单词统计的结果请见当前目录result.txt文件");
       //将map.entrySet()转换成list
       List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());
       //通过比较器实现排序
       Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
        //降序排序
        public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
         return o2.getValue().compareTo(o1.getValue());
        }
       });
       int num = 1;
       //将结果写入文件
       for(Map.Entry<String, Integer> map : list) {
        if(num <= 10) {
         bw.write("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次");
         bw.newLine();
         System.out.println(map.getKey() + ":" + map.getValue());
         num++;
        }
        else break;
       }
       bw.write("耗时:" + (System.currentTimeMillis() - t1) + "ms");
       br.close();
       bw.close();
       System.out.println("耗时:" + (System.currentTimeMillis() - t1) + "ms");
      } catch (FileNotFoundException e) {
       System.out.println("找不到指定文件!");
      } catch (IOException e) {                                    
       System.out.println("文件读取错误!");
      }
     }
    }
    

      

    思路总结:

    首先需要建立两个txt文档,一个用来存入需要计算文章中单词的出现频率,另一个用来输出最后的统计结果。

    接着建立数组将文章中的单词存入数组中进行计数和比较,然后通过for循环,按照频率高低将前N个高频率单词输出出来

    总体来说这个程序还是挺难的,因为对文件的读写不熟悉,导致在网上花费的时间较多,去熟悉和学习它,最终

    再通过学习和借鉴网上的经验写出了这个程序。

  • 相关阅读:
    android判断程序是否前台显示---及判断屏幕是否是亮的----附赠BAIDU定位的工具类实现代码
    Lock and synchronized 摘自官网, 摘录下来方便笔记
    SQLite 基础
    如何stop,suspend一个线程 在deprecated的情况下
    HashMap 的遍历 for:each 和EntrySet两种方法
    ListView图片异步加载与缓存策略
    android debug学习笔记 monkeyrunner
    回溯法和DFS leetcode Combination Sum
    leetcode Count and Say
    leetcode Jump Game I II 待续 贪心看不懂啊!!!!
  • 原文地址:https://www.cnblogs.com/1502762920-com/p/9774944.html
Copyright © 2011-2022 走看看