软件工程作业二:WordCount实现与改进

首先,我在网上找了一个WordCount的源码,在源码上进行修改

原文博主:波涛汹涌

原文链接:http://blog.sina.com.cn/s/blog_51335a000101ouzf.html

原文代码:

wordCountDemo

原文的代码实现读取文件,统计所有出现过的单词(不重复),并统计打印每个单词出现的次数。代码导入包时有两个错误。且打印存在重复,输出不好看。

修改后的代码:

  1 import java.io.BufferedReader;
  2 import java.io.BufferedWriter;
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileReader;
  6 import java.io.FileWriter;
  7 import java.io.IOException;
  8 import java.io.InputStreamReader;
  9 import java.util.ArrayList;
 10 import java.util.Collections;
 11 import java.util.HashMap;
 12 import java.util.HashSet;
 13 import java.util.List;
 14 import java.util.Map;
 15 import java.util.Set;
 16 import java.util.TreeMap;
 17
 18 /**
 19  *
 20  * @author 张军洪
 21  * original author:波涛汹涌
 22  * http://blog.sina.com.cn/s/blog_51335a000101ouzf.html
 23  *
 24  */
 25
 26 public class WordCount {
 27     private static String path_src = "C:/Users/张军洪/Desktop/shenma.txt";
 28     private static String path_result = "C:/Users/张军洪/Desktop/shenma_result.txt";
 29     private static BufferedReader br = null;
 30     private static BufferedWriter bw = null;
 31     private static String line_current = null;
 32     private static String[] words = null;
 33     private static List<String> word_list = new ArrayList<String>();  //所有出现的单词(不重复)
 34     static int countWord=0;
 35     static int countChar=0;
 36     static int countLine=0;
 37     static String s="";
 38     static String strCount="";
 39
 40     public static void main(String[] args) {
 41
 42         File file = new File(path_src); // 读取文件
 43
 44         // 错误处理
 45         if (!file.exists()) {
 46             System.out.println("file " + file + " is not existed, exit");
 47             return;
 48         }
 49         try {
 50             br = new BufferedReader(new FileReader(file.getPath()));
 51             line_current = br.readLine();
 52             while (line_current != null) {
 53                 words = line_current.split(" |,|\\.");
 54                 for (String s : words) {
 55                     if (!s.equals(""))
 56                         word_list.add(s);
 57                 }
 58
 59                 line_current = br.readLine();
 60             }
 61
 62             // 打印单词
 63             for (String temp : word_list) {
 64                 System.out.println(temp);
 65             }
 66              br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(path_src))));
 67              while((s=br.readLine())!=null)
 68               {
 69                  s=s+" ";
 70                  strCount+=s;
 71                countLine++;
 72               }
 73              for(int i=0;i<strCount.split(" ").length;i++){
 74                  if(!strCount.split(" ")[i].equals(" "))
 75                      countWord++;
 76                  countChar+= strCount.split(" ")[i].length();
 77              }
 78              System.out.println();
 79 //             System.out.println("单词数:"+countWord);
 80 //             System.out.println("字符数:"+countChar);
 81 //             System.out.println("行数:"+countLine);
 82 //             System.out.println();
 83
 84             // HashSet
 85             Set<String> hashSet = new HashSet<String>(word_list);
 86 //            for (String str : hashSet) {
 87 //                System.out.println("word: " + str + ", occur times: " + Collections.frequency(word_list, str));
 88 //            }
 89
 90             // HashMap
 91             Map<String, Integer> hashMap = new HashMap<String, Integer>();
 92             for (String temp : word_list) {
 93                 Integer count = hashMap.get(temp);
 94                 hashMap.put(temp, (count == null) ? 1 : count + 1);
 95             }
 96
 97             // TreeMap
 98             TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>(hashMap);
 99
100             // Record result to another file
101             printMap(treeMap);
102         } catch (IOException e) {
103             e.printStackTrace();
104         } finally {
105             closeInputStream(br);
106             closeOutputStream(bw);
107         }
108     }
109
110     //将数据写入文件(两种打印方式)
111     public static void printMap(Map<String, Integer> map) throws IOException {
112
113         bw = new BufferedWriter(new FileWriter(path_result));
114
115         Set<String> keys = map.keySet();
116         for (String s : keys) {
117             System.out.println("word: " + s + ", times: " + map.get(s));
118             writeResult("word: " + s + ", times: " + map.get(s));
119         }
120         System.out.println();
121         System.out.println("单词数目:" + countWord);
122         writeResult(String.valueOf(countWord));
123         System.out.println("字符数目:" + countChar);
124         writeResult(String.valueOf(countChar));
125         System.out.println("行数:" + countLine);
126         writeResult(String.valueOf(countLine));
127 //        for (Map.Entry<String, Integer> entry : map.entrySet()) {
128 //            System.out.println("word: " + entry.getKey() + ", number : " + entry.getValue());
129 //            writeResult("word: " + entry.getKey() + ", number : " + entry.getValue());
130 //        }
131
132     }
133
134     //写入函数
135     public static void writeResult(String line) throws IOException {
136
137         try {
138             if (bw != null) {
139                 bw.write(line);
140                 bw.newLine();
141                 bw.flush();
142             }
143         } catch (IOException e) {
144             e.printStackTrace();
145             closeOutputStream(bw);
146         }
147     }
148
149     public static void closeOutputStream(BufferedWriter writer) {
150         try {
151             if (writer != null) {
152                 writer.close();
153             }
154         } catch (IOException e) {
155             e.printStackTrace();
156         }
157     }
158
159     public static void closeInputStream(BufferedReader reader) {
160         try {
161             if (reader != null) {
162                 reader.close();
163             }
164         } catch (IOException e) {
165             e.printStackTrace();
166         }
167     }
168 }

经过修改的代码在原有功能的基础上,添加了能够统计单词数目,字符数目,文件行数的功能。优化输出打印方式,使结果查看更简单。

时间: 2024-11-06 11:39:31

软件工程作业二:WordCount实现与改进的相关文章

软件工程作业二——Game

一.实验目的 (1)Python 程序阅读理解 (2)学习Python编码风格指南中译版(Google Soc),改进Python程序 (3)如何设计游戏规则,使得慈善事业可持续. 地铁口放置硬币箱(初始值500硬币),顾客可取.可放.请设计一组规则,使得该钱箱永远有钱取(尽量符合实际) 二.实验步骤 step 1:fork 老师的仓库 点击 http://git.oschina.net/juking2017/Game.git 将其fork到自己的码云仓库: Step 2:将仓库Game.git

软件工程作业二

1书中说开发者要做足够好的软件,那么什么样软件是“足够好”的软件呢? 2作为一名大学生,如果我们要做软件这个职业的话,我们必然要成为软件工程师,那么作为一名软件工程师我们要怎样提升自己的能力和价值? 3当一个团队中发生了严重的分歧,我们应该如何处理呢? 4我们经常讲要有团队意识,尤其是软件工程师,但是现在社会上又有一种声音要全面发展的人才,这是否与书中强调的团队有冲突呢? 5在一个软件开发之前我们应该有哪些准备呢?在软件后续的维护中我们又需要做些什么呢? 6创新出来的新产品一定会比旧产品更受到人

现代软件工程作业4-7(龙秋娴)

4.Dijkstra曾经提到:“Software engineering, of course,presents itself as another worthy cause,but that is eyewash: if you carefully read its literature and analyse what its devotees actually do,you will discover that software engineering has accepted as it

《Junit》——软件工程作业.vo2

<Junit>--软件工程作业.vo2 一.开发工具选择 我选择Eclipse: 二.编写与测试环节 (1)编写想要测试的Java类 (2)导入Junit (3)编写测试类 单元测试覆盖标准: [x] 语句覆盖:选择合适用例,所有语句被执行一次. [x] 判定覆盖:每个判定至少取一次真.一次假. [x] 条件覆盖:每个条件的各种可能结果至少满足一次. [x] 判定条件覆盖:同时满足判断覆盖和条件覆盖. [x] 条件组合覆盖:所有组合情况都要覆盖一次. 代码如下: package first;

《结对作业2》——软件工程作业.vo5

软件工程作业.vo5 一.题目选择 我们选择题目一: [x] 能够自动生成四则运算练习题 [x] 可以定制题目数量 [x] 用户可以选择运算符 [x] 用户设置最大数(如十以内.百以内等) [x] 用户选择是否有括号.是否有小数 [x] 用户选择输出方式(如输出到文件.打印机等) 二.职责分配 驾驶员--毕振国-博客地址 导航员--杨颢 三.结果展示 1.操作界面示例 2.输出界面示例 ++(此处应有掌声,啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪--)++ 四.代码审查表 代码地址: https://co

【VMCloud云平台】SCCM(七)域内推软件(二)

继上一篇云平台完成SCCM部署篇之后,SCCM篇正式开始,今天将开始介绍SCCM为域内机器推送软件(紫色为完成实施,红色为实施中): 1. 点击上端部署: 2. 选择集合为之前创建的集合: 3. 由于已经分发内容,这一页就保持默认即可: 4. 选择部署类型为可用,可供用户选择: 5. 不指定计划,让用户随时可以安装: 6. 这里选择默认即可: 7. 默认下一步: 8. 确认下一步后点击确定: 9. 进入客户端,将部署计划进行手动触发(在控制面板中找到CCM代理): 10. 过一会儿,就可以看到软

将公司上线的 App软件生成二维码操作

将上线到App  Store 的软件生成 二维码,通过扫描二维码即可实现自动跳转到App Store 找到该软件进行下载安装 准备工作: 1. 一台mac  电脑 2. mac 版的  iTunes  软件(苹果电脑自带) A.  接下来就是在mac电脑的 iTunes 软件上找到贵公司上线的App软件(通过输入App软件的名称进行搜索到) 1. 打开mac电脑上的这个iTunes软件 2.  点击应用程序,然后在后面的搜索框中输入贵公司的App名称 回车键进行搜索 3. 接下来将搜索到的App

软件工程作业(二)

一.问题 1.挂在各大下载平台上的免费手机APP,使用后也没有充钱才能得到更好的体验等功能,那这样的一个软件是靠什么盈利呢? 2.如何成为一个合格的软件工程师? 答:①不要害怕失败.②重视自己的代码.③不要害怕去寻求帮助.④明白自己并不能掌握所有的知识.⑤做一个持续的学习者 3.怎样才算是一个成功的手机APP? 4.学习软件工程,面对满书的理论,铺天盖地的代码,如何才能觉得不枯燥? 5.软件工程学的主要内容是什么? 答:软件开发技术和软件工程管理 二.分析三个用过的软件 1.手机APP“人人美剧

软件工程作业2——硬币游戏—— 代码分析与改进

任务: Python 程序阅读理解 学习Python 编码风格指南中译版(Google SOC), 改进Python程序 如何设计游戏规则,使得慈善事业可持续. 地铁口放置硬币箱(初始值500硬币),顾客可取.可放.请设计一组规则,使得该钱箱永远有钱取(尽量符合实际) 参考:地铁口钱箱 步骤: 1. fork 老师的仓库 +硬币游戏:http://git.oschina.net/juking2017/Game.git 将其 fork 到你的码云仓库. 2.clone 到本地,修改后 push 到