WC的基本功能实现.(Java)
我的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 |
| 合计 |
WC的基本功能实现.(Java)的更多相关文章
- 软件工程作业 - 实现WC功能(java)
项目地址:https://github.com/yogurt1998/WordCount 要求 基本要求 -c 统计文件字符数(实现) -w 统计文件单词数(实现) -l 统计文件行数(实现) 扩展功 ...
- 软工作业1:wc.exe项目开发(java)
Github地址:https://github.com/Zzhaomin/learngit 项目相关要求 : wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...
- 用sed实现wc -c的功能
sed是所谓的流编辑器,我们经常用它来做一些文本替换的事情,这是sed最擅长的事情,如sed 's/Bob/Tom/g'就是把文章中所有的Bob改成Tom. sed是图灵完备的,作为sed的粉丝,喜欢 ...
- 模仿WC.exe的功能实现--node.js
Github项目地址:https://github.com/102derLinmenmin/myWc WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要 ...
- MyCP -tx -xt 功能的Java实现
MyCP -tx -xt 功能的Java实现 功能简介 java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件 java MyCP -xt ...
- 用sed实现wc -w的功能
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7663831.html 作者:窗户 Q ...
- 功能:Java注解的介绍和反射使用
功能:Java注解的介绍和反射使用 一.注解 1.注解介绍 java注解(Annotation),又称为java标注,是jdk5.0引入的一种机制. Java 语言中的类.方法.变量.参数和包等都可以 ...
- 软件工程:Java实现WC.exe基本功能
项目相关要求 GitHub地址:https://github.com/3216004716/WC 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处 ...
- 软件工程:java实现wc项目基本功能
项目相关要求 项目地址:https://github.com/xiawork/wcwork 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个 ...
随机推荐
- ftplib模块编写简单的ftp服务
from ftplib import * import os,readline import sys class MyFtp: ftp = FTP() #建立一个ftp对象的链接 '): #构造函数初 ...
- Java EE学习路线
题记: 不行动,注定是个失败者! 1.coding:servlet->jsp 通过看视频快速上手 2.reading:Thinking in java 英文版 时间协调安排: 1.上课时认真听课 ...
- Redis作为缓存服务器
1.ICache的Redis实现没有放在'Framework.Cache/Logic'中.如果是以前,我会认为这样不好.我会这样做,'Framework.Cache'项目引用Redis项目或直接从Nu ...
- maven创建webapp项目
新建maven项目 勾选 create a simple project 点击next 填写maven项目信息,packaging 选择war,点击Finish 创建成功后,项目结构如下 选择项目右键 ...
- 将本地Jar包安装到maven仓库中去
开发中会遇到无法通过pom.xml下载jar包的情况,遇到这种情况我们可以手动在本地安装jar包到本地仓库中去,这样就可以下次再用到的话不用再次联网下载,具体以oracle的驱动包ojdbc6.jar ...
- ElasticSearch如何新增字段
/index/type/_mapping post { "properties": { "zy_renwu_pingjia": { "type&qu ...
- 第1章WCF简介(WCF全面解析读书笔记2)
第1章 WCF简介 面向服务架构(SOA)是近年来备受业界关注的一个主题,它代表了软件架构的一种方向.顺应SOA发展潮流,微软于2006年年底推出了一种新的分布式通信框架Windows Communi ...
- Python OrderedDict使用
一.最近最少使用实现: import collections class LRUDict(object): ''' 最近最少使用队列实现,最近使用的键值放后面 ''' def __init__(sel ...
- js动态的给json对象添加新的元素
把{name:"xxx",age:"xxx"}变成{name:"xxx",age:"xxx",value:"x ...
- cf499B-Lecture 【map】
http://codeforces.com/problemset/problem/499/B B. Lecture You have a new professor of graph theo ...