第4次作业

package 统计单词频率;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.*;

public class 统计单词 {
    public static void main(String[] args) 
    {
      try{
          FileReader fr1=new FileReader("Gone_with_the_wind.txt");   //读取文本
          BufferedReader bf1=new BufferedReader(fr1);
          String str1 = null;String [] str=null;String [] str2=null;
          Map<String,Integer> map = new TreeMap<String,Integer>(); 
            /*map接口统计字母出现频率           注意TreeMap<String,Integer>和HashMap<String,Integer> 区别
            * 前者先将字符串自动按字典顺序排序,后者不会
            */
          while((str1=bf1.readLine())!=null)            //按行读取
          {                      
                 str=str1.split(" ");                      //按空格切分字符串               
                for(int i=0;i<str.length;i++)
                 {
                  str2=str[i].split("");                //把一个字符串分为一个一个的字符,主要目的是为了好把字母以外的符号去掉
                  String a=null;
                  for(int j=0;j<str2.length;j++)       
                  {    
                      if(str2.length>1)
                      {
                          if(str2[j].charAt(0)>='A'&&str2[j].charAt(0)<='Z'||str2[j].charAt(0)>='a'&&str2[j].charAt(0)<='z')                  
                        {
                          str2[j]=str2[j].toLowerCase();  //大写变小写
                          if(a==null)
                              a=str2[j];
                          else
                              a=a+str2[j];                //一个完整的只有字母的字符串即完整的单词
                        }
                      }
                  }
                  str[i]=a;              
                 }
        for (int j = 0; j < str.length; j++) 
        {
         if(str[j]!=null)  
         {
            Integer count = map.get(str[j]);       //一个单词出现的次数
          if(count==null)                        //如果没有出现过,置一次
          {
          map.put(str[j],1);
          }
          else                                  //如果以前出现过,那么次数加一
          {
          map.put(str[j],++count);
          }
         }
        } 
        sort(map);                        //调用排序的方法,排序并输出   
      }
          fr1.close(); bf1.close();
     }catch(Exception e){
            e.printStackTrace();}
    }
    public static void sort(Map<String,Integer> map){  
        List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());   
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {     
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {     
                return (o2.getValue() - o1.getValue());     
            }     
    }); //排序 
        String [] str3=null; 
        int len=infoIds.size();
        int count=1;
        
    try{
        FileWriter fw=new FileWriter("Result1.txt");
        BufferedWriter bw=new BufferedWriter(fw);
        int q=0;
        for (int i = 0; i < len; i++) 
        {   //输出  
            Map.Entry<String, Integer> id = infoIds.get(i); 
            if(id.getKey()!=null)                                       
                  str3=id.getKey().split("");
                if( str3!=null&&str3.length>3)                     //str3可能为空,且这个控制只有含有3个字母以上的单词才打印
         if(count<=5)
          {
             q=id.getValue();
             bw.write(id.getKey());
             bw.write(":  ");
             bw.write(String.valueOf(q));
             bw.write("\t");
             count++;
          }
         else
         {
           q=id.getValue();
           bw.write(id.getKey());
           bw.write(":  ");
           bw.write(String.valueOf(q));
           bw.write("\r\n");       //换行
           count=1;
         }
        }
        bw.close();fw.close();
    }catch(Exception e){
        e.printStackTrace();} 
    } 
} 

  文件

posted @ 2016-03-22 17:10  咗手写暧  阅读(135)  评论(2编辑  收藏  举报