我的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)的更多相关文章

  1. 软件工程作业 - 实现WC功能(java)

    项目地址:https://github.com/yogurt1998/WordCount 要求 基本要求 -c 统计文件字符数(实现) -w 统计文件单词数(实现) -l 统计文件行数(实现) 扩展功 ...

  2. 软工作业1:wc.exe项目开发(java)

    Github地址:https://github.com/Zzhaomin/learngit 项目相关要求 : wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...

  3. 用sed实现wc -c的功能

    sed是所谓的流编辑器,我们经常用它来做一些文本替换的事情,这是sed最擅长的事情,如sed 's/Bob/Tom/g'就是把文章中所有的Bob改成Tom. sed是图灵完备的,作为sed的粉丝,喜欢 ...

  4. 模仿WC.exe的功能实现--node.js

    Github项目地址:https://github.com/102derLinmenmin/myWc WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要 ...

  5. MyCP -tx -xt 功能的Java实现

    MyCP -tx -xt 功能的Java实现 功能简介 java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进制数字)转化为二进制文件 java MyCP -xt ...

  6. 用sed实现wc -w的功能

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7663831.html 作者:窗户 Q ...

  7. 功能:Java注解的介绍和反射使用

    功能:Java注解的介绍和反射使用 一.注解 1.注解介绍 java注解(Annotation),又称为java标注,是jdk5.0引入的一种机制. Java 语言中的类.方法.变量.参数和包等都可以 ...

  8. 软件工程:Java实现WC.exe基本功能

    项目相关要求 GitHub地址:https://github.com/3216004716/WC 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处 ...

  9. 软件工程:java实现wc项目基本功能

    项目相关要求 项目地址:https://github.com/xiawork/wcwork 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个 ...

随机推荐

  1. ftplib模块编写简单的ftp服务

    from ftplib import * import os,readline import sys class MyFtp: ftp = FTP() #建立一个ftp对象的链接 '): #构造函数初 ...

  2. Java EE学习路线

    题记: 不行动,注定是个失败者! 1.coding:servlet->jsp 通过看视频快速上手 2.reading:Thinking in java 英文版 时间协调安排: 1.上课时认真听课 ...

  3. Redis作为缓存服务器

    1.ICache的Redis实现没有放在'Framework.Cache/Logic'中.如果是以前,我会认为这样不好.我会这样做,'Framework.Cache'项目引用Redis项目或直接从Nu ...

  4. maven创建webapp项目

    新建maven项目 勾选 create a simple project 点击next 填写maven项目信息,packaging 选择war,点击Finish 创建成功后,项目结构如下 选择项目右键 ...

  5. 将本地Jar包安装到maven仓库中去

    开发中会遇到无法通过pom.xml下载jar包的情况,遇到这种情况我们可以手动在本地安装jar包到本地仓库中去,这样就可以下次再用到的话不用再次联网下载,具体以oracle的驱动包ojdbc6.jar ...

  6. ElasticSearch如何新增字段

    /index/type/_mapping  post { "properties": { "zy_renwu_pingjia": { "type&qu ...

  7. 第1章WCF简介(WCF全面解析读书笔记2)

    第1章 WCF简介 面向服务架构(SOA)是近年来备受业界关注的一个主题,它代表了软件架构的一种方向.顺应SOA发展潮流,微软于2006年年底推出了一种新的分布式通信框架Windows Communi ...

  8. Python OrderedDict使用

    一.最近最少使用实现: import collections class LRUDict(object): ''' 最近最少使用队列实现,最近使用的键值放后面 ''' def __init__(sel ...

  9. js动态的给json对象添加新的元素

    把{name:"xxx",age:"xxx"}变成{name:"xxx",age:"xxx",value:"x ...

  10. cf499B-Lecture 【map】

    http://codeforces.com/problemset/problem/499/B B. Lecture     You have a new professor of graph theo ...