英文单词个数统计及排序
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( :)遍历的使用。