读取小文本文件A_Tale_of_Two_Cities.txt 或者 大文本文件Gone_with_the_wind.txt,统计某一指定单词在该文本文件中出现的频率。

命令行格式: 提示符> Myapp.exe -f filename.txt -w word (PS:C++ 程序,Java 程序输出方式类似)

解释:

选项 -f 表示打开某一文件(filename.txt)

选项 -w 表示统计其后单词(word)在打开的文件(filename.txt)中的频率。

 

这次的作业是在上一次的作业基础的进行改动,正如赵建的所说那样,有了第一次的源程序,第二次的要求,只需要把存储结构和排序算法删了,再逐一读取,最后输出来就好了。

 

package note1;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
import java.util.regex.*;
import java.util.Comparator;

public class part2 {

    public static void main(String[] args)
    {
        
        //input
        Map<String,Integer> numcount=new HashMap<String,Integer>();
        Pattern pat=Pattern.compile("\\b[A-Za-z][A-Za-z0-9]*\\b");
        
        String filename="";
        String keyWord="";
        int count=0;
        
        for(int i=0;i<args.length-1;i++)
        {
            if(args[i].equals("-f"))
            {
                filename+=args[i+1];
            }
            else if(args[i].equals("-w"))
            {
                keyWord+=args[i+1];
            }
        }
        
        try{
        BufferedReader in=new BufferedReader(new FileReader(filename));
        
        //process
        String temp;
        while((temp=in.readLine())!=null)
        {
            Matcher mth=pat.matcher(temp);
            boolean tf=mth.find();
            while(tf)
            {
                String buffer=mth.group().toLowerCase();
                if(buffer.equals(keyWord.toLowerCase()))
                {
                    count+=1;
                }
                tf=mth.find();
            }
        }    
        in.close();
        
        //output
        System.out.println("keyword "+keyWord+" occurred "+count+" times !");
        
        }catch(FileNotFoundException e)
        {
            System.out.println("Cannot find the specified file");
        }
        catch(IOException e)
        {
            System.out.println(e.getMessage());
        }

    }
}

运行结果: