1 import java.io.*;
2 import java.util.*;
3 public class treat {
4
5 public static void main(String[] args) {
6 Map<String,Integer> map=new HashMap<String,Integer>();
7 try {
8 File file=new File("/Users/lilongrong/Desktop/win.txt");
9 BufferedReader read=new BufferedReader(new FileReader(file));
10 String str;
11 while((read.readLine())!=null) {
12 str=read.readLine();
13 String[] strsplit=str.split("\\W+");
14 for(int i=0;i<strsplit.length;i++) {
15 if(map.containsKey(strsplit[i])) {
16 int a;
17 a=map.get(strsplit[i]);
18 map.put(strsplit[i],a+1);
19 }else {
20 map.put(strsplit[i],1);
21 }
22 }
23 }
24 Iterator<Map.Entry<String,Integer>> iterator=map.entrySet().iterator();
25 double qwe=map.size();
26 /*while(iterator.hasNext()) {
27 Map.Entry<String,Integer> entry=iterator.next();
28 System.out.printf("%s:%d %.2f\n",entry.getKey(),entry.getValue(),entry.getValue()/qwe);
29 }*/
30 }
31 catch(Exception e){
32 System.err.println(e);
33 }
34 List<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());
35 Collections.sort(list, new Comparator<Map.Entry<String, Integer>>(){
36 @Override
37 public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
38 return o2.getValue().compareTo(o1.getValue());
39 }
40 });
41 for(Map.Entry<String,Integer> a:list){
42 System.out.println(a.getKey()+":"+a.getValue());
43 }
44
45 }
46
47 }
该程序实现了大文本的单词统计与单词出现次数的排序,具体实现流程如下:
1、Bufferedreader类实现文本读入,拆分,String类下的split函数实现单词分割。
2、建立Map类,实现统计功能。
3、不排序时使用迭代器进行输出,排序时使用List接口,再使用Collections下的sort函数进行排序,for循环进行遍历输出。
收获:
1、List是一个接口,ArrayList是一个类,面向接口编程;
2、文件的读入,文件转化为文字,再把文字缓冲读入;
3、模版类Map<String,Integer>;
4、重写函数override;
5、迭代器的使用;
6、for( :)遍历的使用。