个人项目--词频统计

需求概要

原需求

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

原文地址:https://www.cnblogs.com/linliaimeili/p/5918350.html