统计英语文章的单词

       今天的工程项目作业是输出一篇英语文章中前N个最常出现的英语单词,并将结果输入到文本文件中。

       看到这题后,我首先按照老师讲课的内容将这个程序分成一个又一个模块:

1.实现文件的输出;

2.对输出的内容进行统计;//可以分的更多

3.将结果输入到文件中。

        文件的输入输出通过BufferedWriter、BufferedReader实现,运用exists判断文件打开是否成功,如果失败则创建文件。把文件的输出单独作为一个函数,来确定文件的输出是否成功。这个项目最难的地方是对单词进行统计,这个地方我是通过借鉴了他人的程序实现的,首先是通过正则表达式匹配单词,之后通过映射统计单词出现的次数,通过Collections中的sort对单词出现的次数进行排序。通过这个作业,我认识到了自己的不足,太长时间为未用java编程导致有些生疏,平常训练不够,对java的很多方法掌握的不够多。也收获了很多,巩固了java文件的输入输出,知道了很多java的新方法,学习了正则表达式的定义以及java的映射,学习了Collections。这次的作业大部分是看了别人的代码,在下次作业时,我要靠自己的能力完成。

collections:

     使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的 。

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Statistics {
    public static String Init(String fileName) //输出文件中的内容
    {
        String S=null;
        File file=new File(fileName);
        if(file.exists()) {
            if(file.isFile()) {
                try {
                    BufferedReader input=new BufferedReader(new FileReader(file));
                    StringBuffer buffer = new StringBuffer();
                    String text;
                     while((text = input.readLine()) != null)
                         buffer.append(text +"");
                     S = buffer.toString();
                }catch(IOException ioException){
                      System.err.println("File Error!");
                }
            }
        }
        return S;
    }
    public static void count(String str) throws IOException
    {
        Pattern expression = Pattern.compile("[a-zA-Z]+");//定义正则表达式匹配单词
        Matcher matcher = expression.matcher(str);
        Map<String,Integer> map=new HashMap<String,Integer>();
        String word = "";
        int n = 0;  
        Integer times = 0;
        while(matcher.find())//是否匹配单词
        {
            word = matcher.group();//得到一个单词,树映射中的键
            n++;
            if( map.containsKey(word) ) {
                times = map.get(word);
                 map.put(word, times+1);
            }
            else {
                map.put(word, 1);
            }
        }
        List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
        Comparator<Map.Entry<String,Integer>> comparator = new Comparator<Map.Entry<String,Integer>>()
                {

                    @Override
                    public int compare(Entry<String, Integer> left, Entry<String, Integer> right) {
                        // TODO 自动生成的方法存根
                        return (left.getValue()).compareTo(right.getValue());
                    }

                };
        Collections.sort(list, comparator);
        BufferedWriter bufw = new BufferedWriter(new FileWriter("result.txt"));//将信息输入到文件中
        int last=list.size()-1;
        System.out.println("");
        for(int i=last;i>last-5;i--)
            {
            bufw.write("key="+list.get(i).getKey()+" value="+list.get(i).getValue());
            bufw.newLine();
            System.out.println("key="+list.get(i).getKey()+" value="+list.get(i).getValue());
            }
        bufw.close();
    } 
    public static void main(String[] args) throws IOException
    {
        File file1=new File("stit.txt");
        if(!file1.exists())//如果打开失败,创造文件
            file1.mkdir();
        File file2=new File("result.txt");
        if(!file2.exists())
            file2.mkdir();
        String str = Init("stit.txt");
         System.out.print(str);
         count(str);
    }

}

猜你喜欢

转载自www.cnblogs.com/liujinxin123/p/9774750.html