WC的基本功能实现.(Java)
2018-09-18 06:34:56来源:博客园 阅读 ()
我的GitHub地址:https://github.com/Yuetao1219/lessons
WC 项目要求
wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
具体功能要求:
程序处理用户需求的模式为:
wc.exe [parameter] [file_name]
基本功能列表:
wc.exe -c file.c //返回文件 file.c 的字符数
wc.exe -w file.c //返回文件 file.c 的词的数目
wc.exe -l file.c //返回文件 file.c 的行数
项目分析与实现
1.统计文本文件,首先要读入文件,并确保文件存在并可读。用exists()方法和canRead()方法对输入的文件进行判断。代码如下:
2.对于要执行的操作,用-c统计字符,-l统计行数,-w统计单词,-z统计字母。设计思路:以字符串的形式输入一个或多个操作符,用空格隔开。然后用split()方法将字符串以空格分成一个或多个字符串数组,最后遍历数组实现想执行的操作。
3.统计字符数和行数。用read()方法依次扫描文件内的每一个字符,遇到'\n',则rows++,遇到!(' '&&'\n'),则chars++。
4.统计单词。这个也是相对比较难的操作。因为对代码中单词的定义是不明确的,比如:int(算是一个单词吗?),char_count(算是一个单词or两个单词)。既然要统计,就得找到一个明确的标准。我的标准是,对于两个及两个以上连续的字母则为一个单词,除字母以外的字符作为单词与单词之间的分隔符。例如:对于前述的例子,int 算是一个单词,char_count算是两个单词char和count。于是,既然找到了是否是单词的定义,那么怎样用代码来实现?
前面的统计字符数和行数都是直接对文本文件进行依次扫描,那么统计单词,就是在统计字母的基础上,加上一个flag对字母是否连续进行判断,以此到达统计单词的目的。代码如下:
首先判断是否是字母,如果是,则flag++,不是,则flag置0。当flag>=2(满足至少两个字母连续),且当前字母不是字母,则words++。
遇到的困难:我最开始想到上面这个思路后,用代码实现,我只是对flag>=2&&a不是字母进行了判断,并words++,flag=0。没有想到当flag=1时a不是字母的情况,此时,没有将flag置0,尽管代码没有被报错,但是,我运行程序后,多次输入不同的测试文件,得出的输出值都是错误。后来,我仔细分析了该段代码,找到了代码不严谨而导致错误的地方,没有对扫描会出现的所有情况进行逐一分析,只想到了大多数情况,忽略了一些不起眼的小问题而导致这段代码进行了错误的计算。经过思考和改正代码,然后又输入多个不同文件进行验证,都得到了理想的输出结果。
测试:
总结:代码量比较少,但是基本实现了对文本文件的字符数、行数、单词和字母的统计,还没有实现对空行数、注释行数和代码行数进行统计,需要改进和升级的地方还有很多。条条大路通罗马,对于这个项目要求,一定有很多的方案和设计,以及更简洁的代码,所谓简洁,不只是代码量少,而且时间复杂度低。
PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 210 | |
· Estimate | · 估计这个任务需要多少时间 | 180 | 240 |
Development | 开发 | 150 | 210 |
· Analysis | · 需求分析 (包括学习新技术) | 50 | 90 |
· Design Spec | · 生成设计文档 | 60 | 80 |
· Design Review | · 设计复审 (和同事审核设计文档) | 30 | 40 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 40 | 50 |
· Design | · 具体设计 | 40 | 50 |
· Coding | · 具体编码 | 90 | 120 |
· Code Review | · 代码复审 | 20 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 45 | 50 |
Reporting | 报告 | 30 | 40 |
· Test Report | · 测试报告 | 30 | 30 |
· Size Measurement | · 计算工作量 | 30 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
合计 |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- nacos~配置中心功能~springboot的支持 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
- java8 stream的分组功能,具体时候是真的好用 2020-06-10
- Spring Boot 实现定时任务的 4 种方式 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash