读取小文本文件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()); } } }
运行结果: