需求概要
原需求
1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符。
2.统计英文单词在本文件的出现次数
3.将统计结果排序
4.显示排序结果
新需求:
1.小文件输入. 为表明程序能跑
2.支持命令行输入英文作品的文件名
3. 支持命令行输入存储有英文作品文件的目录名,批量统计。
4. 从控制台读入英文单篇作品
程序输入:
1.控制台输入文本
2.英文文本文件
3.英文目录,目录下包含单个或多个英文文本文件
程序输出:
1.英文单词在本文件或控制台输入中的出现的次数,按出现次数排序
2.文本或控制台输入文字的单词数
输出位置:
控制台或指定文件
代码实现
代码有两个分支,1、选择输入文本路径或,2、选择直接输入文章
1 public static void main(String[] args) { 2 HashMap<String,Integer> map=new HashMap<String,Integer>();//用于统计各个单词的个数,排序 3 //过滤字符串中的所有标点符号 4 String regex=" ?.!:,""''; "; 5 BufferedReader br; 6 try { 7 //FileReader类创建了一个可以读取文件内容的Reader类、调用构造方法FileReader() 8 Scanner scan = new Scanner(System.in); 9 System.out.println("请输入您的输入格式"); 10 System.out.println("1、文件完整路径"); 11 System.out.println("2、文章内容"); 12 int flag = scan.nextInt(); 13
小文件输入键盘在控制台下输入命令。在控制台输入文本路径即可进行词频统计。
1 System.out.println("请输入文件完整路径"); 2 2 String fileUrl = scan.next(); 3 3 br = new BufferedReader(new FileReader(fileUrl));//文件完整路径 4 4 String sentence; 5 5 int wordCount = 0; 6 6 try { 7 7 while((sentence = br.readLine()) !=null){ //用readLine读取文件,判断读取文件是否为空 8 8 sentence = sentence.replaceAll(regex, ""); 9 9 StringTokenizer token=new StringTokenizer(sentence); 10 10 while(token.hasMoreTokens()){ //循环遍历 11 11 wordCount++; 12 12 String word = token.nextToken(); 13 13 if(map.containsKey(word)){ //HashMap不允许重复的key,所以利用这个特性,去统计单词的个数 14 14 int count=map.get(word); 15 15 map.put(word, count+1); //如果HashMap已有这个单词,则设置它的数量加1 16 16 } 17 17 else{ 18 18 map.put(word, 1); //如果没有这个单词,则新填入,数量为1 19 19 } 20 20 } 21 21 } 22 22 System.out.println("总共单词数:"+wordCount); 23 23 sort(map); 24 24 } catch (IOException e) { 25 25 e.printStackTrace(); 26 26 } 27 27 break;
运行结果:
1 请输入文件完整路径 2 c://english.txt 3 总共单词数:181 4 as:7 5 the:7 6 not:6 7 it:6 8 to:5 9 are:4 10 a:4 11 your:4 12 in:4 13 they:3 14 live:3 15 and:3 16 of:2 17 do:2 18 may:2 19 by:2 20 be:2 21 clothes:2 22 that:2 23 often:2 24 have:2 25 from:2 26 above:2 27 is:2 28 you:2 29 door:1
psp | |||||
9月26日 | |||||
类型 | 内容 | 开始时间 | 结束时间 | 被打断时间 净时间 | |
查找资料 | 学习单元测试 | 9:00 | 9:48 | 8 | 40 |
测试代码 | 学习代码测试 | 15:00 | 16:08 | 8 | 60 |
修改代码 | 词频修改 | 9:08 | 10:09 | 11 | 50 |
写博客 | 词频相关 | 22:30 | 23:15 | 5 |
40 |
ssh://git@git.coding.net:linliaimeli/FileWord.git
https://git.coding.net/linliaimeli/FileWord.git