java实训一——词频统计

---恢复内容开始---

驾驶员:葛晨延(16012010)

领航员:张广哲(16012007)

码云:https://gitee.com/happywindmannn/GCYshixun1/tree/master

实训过程照片:

 1 import java.io.*;
 2 import java.util.*;
 3 import java.io.BufferedReader;  
 4 import java.io.FileReader;  
 5 import java.util.ArrayList;  
 6 import java.util.Map;
 7 import java.util.List;  
 8 import java.util.Map.Entry;  
 9 import java.util.TreeMap;  
10 public class wtf{
11     public static void main(String args[])throws Exception{
12         StringBuilder result = new StringBuilder();
13         BufferedReader file = new BufferedReader(new FileReader("D:\\javas\\a.txt"));
14         List<String> s =new ArrayList<String>();
15         String s1 = null;
16         while((s1 = file.readLine()) != null){
17             String [] s2 = s1.split("[[^a-zA-Z]]");
18             for(String s3 : s2){
19                 if(s3.length() != 0){
20                     s.add(s3);
21                 }
22             }
23         }
24         Map<String, Integer> TreeMap = new TreeMap<String,Integer>();
25         for(String s4:s){
26             if(TreeMap.get(s4) != null){  
27             TreeMap.put(s4,TreeMap.get(s4)+1);
28             }
29             else{  
30                 TreeMap.put(s4,1);  
31             }
32         }
33         
34         
35         System.out.println("以下是本文章中出现单词频率前十的单词,以及频率:\t");
36         showmap(TreeMap);
37         file.close();
38     }
39     public static void showmap(Map<String,Integer> oldmap){  
40           
41         ArrayList<Map.Entry<String,Integer>> map = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());  
42           
43         Collections.sort(map,new Comparator<Map.Entry<String,Integer>>(){  
44 
45             public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
46                 return o2.getValue() - o1.getValue();   
47             }  
48         });  
49           
50         for(int i = 0; i<10; i++){  
51             
52             System.out.println(map.get(i).getKey()+ ": " +map.get(i).getValue());  
53         }     
54     }  
55   
56 } 

运行结果:

需求:

1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符。
2.统计英文单词在本文件的出现次数
3.将统计结果排序
4.显示排序结果

 解题思路:

x代表对象
1.BufferedReader x = new BufferedReader(new FileReader(文件绝对路径));
缓冲流,更加油效率的读取文件,缓冲访问区(类似于内存条)。
另有方法readline()按行读取可以使用。
相比InputStream()字节流,FileReader()字符流更快。
2.List<String> x = new ArrayList<String>();
创建动态数组,<>中的位数组类型,如int,double,String。
该数组用于存储文章的所有单词。
3. String[] x = readLine.split("[^a-zA-Z]");
创建数组,用readLine()逐行过滤,括号内位正则表达式。
4.for(String x:y){}
“增强的for循环”,x为字符串,y为字符数组
作用是将数组内所有元素,赋值到x中,有多少元素创建多少个x。

5.Map<String, Integer> x = new TreeMap<String,Integer>();
HashMap<String, Integer> x = new HashMap<String, Integer>();
map树(有序) hashmap哈希表(无序)
存储单词计数信息,Stinrg是key值为单词,Integer是value为词频
map.put(k,v)给表赋值
map.get(key)获取key的value

ps:因为某些不可抗力原因程序还不够完整,由下次实训补全。

---恢复内容结束---

猜你喜欢

转载自www.cnblogs.com/happywindman/p/10116015.html