目的与要求
- 代码复审练习
- 结对练习
- 编写单元测试
- 基于上一个结对项目的结果,读取小文本文件A_Tale_of_Two_Cities.txt 或者 大文本文件Gone_with_the_wind.txt,统计某一指定单词在该文本文件中出现的频率。
-
命令行格式: 提示符> Myapp.exe -f filename.txt -w word (PS:C++ 程序,Java 程序输出方式类似)
- 解释:
- 选项 -f 表示打开某一文件
- 选项 -w 表示统计其后单词在打开的文件中的频率
详细内容
- 开发语言:Java
- 开发工具:UltraEdit
- 结对伙伴:陈俊宇http://www.cnblogs.com/junyujun/
- 准备工作:
1. 思路:
基于上一个 结对项目 - 词频统计 的程序和结果,加入了输入的语句,用户可以通过输入所要查询的文件路径及文件名,可以查询到该文本中某一单词的出现频率。
2. 分工:
本次主要是小伙伴带着我开展对Java的学习。
- 源代码
import java.util.*; import java.util.Map.Entry; import java.io.*; public class WordCount3 { public static void main(String[] args) throws Exception { Map<String,Integer> map=new HashMap<String,Integer>(); System.out.println("请输入所要查询的文件路径及文件名:"); Scanner bs=new Scanner (System.in); String files=bs.nextLine(); File file = new File(files+".txt"); FileReader reader = new FileReader(file); int fileLen = (int)file.length(); char[] chars = new char[fileLen]; reader.read(chars); String text = String.valueOf(chars); text = text.replaceAll("[\\‘‘.“”,,]", ""); //删除字符串中的标点符号 text = text.toLowerCase();//将文字全部转换为小写 StringTokenizer take = new StringTokenizer(text); //StringTokenizer是一个用来分隔String的应用类 String word = new String(); int i =0; while( take.hasMoreElements() ) { word=take.nextToken() ; if(word.length()>=4) { Integer count = map.get(word); if(count == null) { map.put(word,1); } else{ map.put(word,++count); } } i++; } //排序 List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet()); Collections.sort( list, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { if(o1.getValue()<o2.getValue()) return 1; else if(o1.getValue()>o2.getValue()) return -1; else return(o1.getKey().compareTo(o2.getKey())); } } ); System.out.println("请输入要查询的单词:"); Scanner sc=new Scanner(System.in); String scword=sc.nextLine().toLowerCase(); for(Map.Entry<String,Integer> entry : map.entrySet()) { if(entry.getKey().equalsIgnoreCase(scword)) { System.out.println(scword+"在该文本中出现"+ entry.getValue()+"次\r\n已保存入指定目录文本中"); File outfile = new File("D:\\Software\\SorfwareTest\\Result2.txt"); try { if (file.exists()) outfile.delete(); BufferedWriter bw = new BufferedWriter(new FileWriter(outfile)); StringBuffer out = new StringBuffer(); out.append(scword+"在该文本中出现"+ entry.getValue()+"次\r\n"); bw.write(out.toString()); bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } } else continue; } //输出TXT } }
- 运行结果
打开文本文件
- 小结
本次的作业主要由小伙伴编辑,我学习并试着上手实际操作, 真·学海无涯
- 源代码Github地址
https://github.com/Jennyhyt/My-source-code/blob/master/TeamWork-WFS%E2%85%A1.cpp