我的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. git commit时候出现的问题

    git commit 提交的时候,出现*** Please tell me who you are. git config --global ...问题 1 $ git commit -a -m 'v ...

  2. vector array and normal stanard array

    array 数组的长度固定 vector 自由存储区(栈),动态长度 普通标准数组相对较不安全,不方便; array,vector对象成员函数支持数组越界检测,同时代价是效率问题: array,普通标 ...

  3. 一些常用的centos命令,记忆下,属于常用的

    一些常用的centos命令,记忆下,属于常用的 查询内网IP hostname -I 查询外网IP curl ifconfig.me 查看硬盘使用情况 df -h 查看系统资源使用率 top 查看系统 ...

  4. 读<分布式一致性原理>初识zookeeper

    zookeeper是什么 zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如:数据发布/订阅,负载均衡,命名服务,分布式协调/通知 ,集群管理,Master选举 ...

  5. mongodb Java(八)

    package com.mongodb.text; import java.net.UnknownHostException; import com.mongodb.DB; import com.mo ...

  6. 加密算法blowfish 多语言

    php加密算法blowfish <?php /** * Created by PhpStorm. * User: Administrator * Date: 2016-02-14 * Time: ...

  7. 利用同步辅助类CountDownLatch计算多线程的运行时间

    一.CountDownLatch jdk提供的一个同步辅助类,在完成一组在在其他线程中执行的操作前,允许一个或者多个其他的线程等待,通过调用 await() 方法阻塞,直到由于 countDown() ...

  8. No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer解决方法

    org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.poj ...

  9. [iOS]UIScrollView嵌套内容在左右拨动的时候自动被顶上问题

    遇到的问题是这样的: 适配6+没问题,但是5s就出问题.我UIScrollView嵌套了左侧UIScrollView,右侧UITableView,左右拨动切换,结果5s下拨动之后两边的View都会自动 ...

  10. C#发送和接受POST请求

    1.发送Post请求代码 /// <summary> /// 发起Http请求 /// </summary> /// <param name="flightDa ...