软工作业 wc-java
项目要求:
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
- 具体功能
- -c 返回文件字符数
- -w 返回词的数目
- -l 返回行数
- 扩展功能
- -s 递归处理目录下符合条件的文件
- -a 返回更复杂的数据(代码行 / 空行 / 注释行)
- 高级功能
- -x 命令行输入-x参数,程序显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。
解题思路描述:
看到这个题目,我首先想到的就是利用java里面的IO流,要统计文件中的行数,可以选择利用BufferReader来按行读出文件中的内容,然后设置一个整型变量来统计行数,直到整个文件全部读完;统计字符数可以通过将读出的文件内容变成字符串的形式,然后计算字符串的长度及为字符的数量。至于统计单词的数量这个功能,每个人大概都不一样吧,因为每个人对单词的定义都不一样,究竟怎么样才算一个单词,每个人有每个人的看法,正如那句老话,一千个人,就有一千个哈姆雷特。我对单词的定义是利用空格以及换行来界定单词,只要是连续的字符,就算一个单词。然后利用字符串的分割,返回一个数组,单词数量就等于数组的长度。这样,就粗略的实现了基本的三个功能。
设计实现过程:
这个项目因为比较简单,所以我只写了了一个类,里面有四个方法,分别是统计字符数、单词数、行数的方法及检测文件是否存在并执行统计的方法;main方法就是调用执行方法,作为一个程序入口的存在。
代码说明:
主要的代码部分就是三个统计方法:
(1)统计行数的方法 c()
设计思路:使用BufferedReader(),按行读入,并将读到的内容赋值给字符串"s",之后计算字符串的长度即为字符的数量。
具体实现:

(2)统计单词的方法 w()
设计思路:使用BufferedReader(),按行读入,每读完一行就将内容赋值给字符串"s"并加一个换行符,然后进行字符串的分割,计算分割后返回数组的长度。
具体实现:
(3)统计行数的方法 l()
设计思路:这个方法相对来说比较简单,直接使用BufferedReader()按行读入,每次读入时进行计数,直到全部的行全部读完。
具体实现:

除了以上的统计方法,还有一个fileExist()方法,这个方法是对用户的输入的文件路径进行判断,若文件存在,则运行三个统计方法,若不存在,则报错。
测试运行:
测试文件:

测试结果:

各部分预计耗费时间和实际耗费时间:
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
30 |
50 |
|
· Estimate |
· 估计这个任务需要多少时间 |
50 |
70 |
|
Development |
开发 |
600 |
800 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
180 |
200 |
|
· Design Spec |
· 生成设计文档 |
30 |
60 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
120 |
150 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
60 |
50 |
|
· Design |
· 具体设计 |
60 |
80 |
|
· Coding |
· 具体编码 |
180 |
200 |
|
· Code Review |
· 代码复审 |
30 |
50 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
50 |
30 |
|
Reporting |
报告 |
60 |
90 |
|
· Test Report |
· 测试报告 |
30 |
60 |
|
· Size Measurement |
· 计算工作量 |
20 |
30 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
30 |
|
合计 |
1520 |
1950 |
项目小结:
这次的项目只实现了基本的功能,因为好久没有使用Java编程,对java的相关知识有点遗忘,通过这次的项目,又重新拿起书本,复习了一遍java的相关知识,对Java有了新的理解,也算收获良多。这次项目的实现起来并不复杂,主要是IO流与字符串的种种方法,采用控制台输出的方式显示结果,并没有专门设计图形界面。
虽然项目不是很复杂,但是体验了如何从零开始做一个项目,并不只是简单的编程,更包括对测试,估计项目耗时的,对软件编写有了新的认识。同时,还学会了使用GitHub来记录项目开发过程,这是之前没有接触过的,也算是一个重大收获。
软工作业 wc-java的更多相关文章
- 软工作业1—java实现wc.exe
github项目地址 https://github.com/liyizhu/wc.exe WC 项目要求 基本功能列表: wc.exe -c file.c //返回文件 file.c 的字符数 ...
- 软工作业(JAVA)
github传送门:https://github.com/hhg52516/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序 ...
- 软工作业-wc(Python实现)
GitHub地址:GitHub PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 40 · Esti ...
- 软工作业-Wc
Wc.exe wc.exe是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行 ...
- 软工作业-----Alpha版本第一周小结
软工作业-----Alpha版本第一周小结 Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...
- [软工作业]-软件案例分析-CSDN
[软工作业]-软件案例分析-CSDN(app) 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件案例分析 我在这个课程的目标是 ...
- 【软工作业&思考】关于软工的一些概念性理解暨第一次阅读作业
概述 项目 内容 本次作业所属课程 2019BUAA软件工程 周二班 本次作业要求 第1次个人作业当然,比这个更重要百倍的还是实实在在的思考,这也是标题如此命名的原因 我在本课程的目标 在原有实践经验 ...
- 软工作业No.3--团队作业:甜美女孩出击!
队名:甜美女孩 队员包括: 姓名 学号 身份 曾祎祺 3216005211 队长 邓画月 3216005212 队员 何颖琪 3216005213 队员 梁沛诗 3216005214 队员 梁子君 3 ...
- BUAA2020软工作业——提问回顾与个人总结
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...
- 软工作业No.1。Java实现WC.exe
网址:https://github.com/a249970271/WC WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有w ...
随机推荐
- PMP 第8章错题总结
1.项目经理为项目的可交付成果定义验收标准.这些应记录在项目范围说明书2.项目的总体预算是“成本基准+管理储备”,成本基准里本身已包含了应急储备.工作包成本估算.活动成本估算3.范围基准包含----项 ...
- java自定义jar包让jmeter使用---给java参数化
上一篇文章中,提到怎么生成jar包让jmeter使用,这次我们来试试做参数,因为发现调包的时候其实更多还是参数化,那么开始改造吧 1.在httpclientpost这个类中替换参数,且打印参数 imp ...
- Redis 分布式锁的正确实现方式(Java版)[转]
本文来源: https://www.cnblogs.com/linjiqin/p/8003838.html 前言 分布式锁一般有三种实现方式: 数据库乐观锁: 基于Redis的分布式锁: 基于ZooK ...
- Linux下安装.NET Core
环境 { "操作系统":"CentOS 7.5 64位", "CPU":"1核", "内存":&qu ...
- 树莓派开启SSH的N种方法
问题:为什么我的树莓派无法使用远程连接电脑? 解答: 由于树莓派只有一个串口,当我们开发中需要占用这个串口或者我们希望进行远程开发(通过一个根网线或无线连接到树莓派).SSH连接,首先需要确认的是: ...
- 深入nginx之《获取用户的真实IP》
获取用户的真实IP Nginx会将客户端的IP信息存放在$remote_addr变量里,但这并不意味着它就是客户端的IP,生产环境往往会充满各种代理,让IP的来龙去脉变得扑朔迷离. 目前互联网公司基本 ...
- linux服务器之间文件传输
有时候我们会遇到,把一个服务器上的文件夹,传到另一个服务器 我们需要先把文件夹打包成 tar.gz,这种格式在任何linux版本上都能压缩/解压 #解压命令 tar -zxvf xxx.tar.gz ...
- Graph machine learning 工具
OGB: Open Graph Benchmark https://ogb.stanford.edu/ https://github.com/snap-stanford/ogb OGB is a co ...
- 013 ECMAScript基础应用
1.ECMAScript概述 (1)前端的发展历程 <1>web 1.0时代 最初的网页以HTML为主,是纯静态的网页.网页是只读的,信息流只能从服务的到客户端单向流通.开发人员也只关心页 ...
- MyISAM 和 InnoDB 索引的区别
阅读目录 一 MyISAM索引实现 二 InnoDB索引实现 三 InnoDB索引和MyISAM索引的区别 回到顶部 一 MyISAM索引实现 1. 主键索引 MyISAM引擎使用B+树作为索引结 ...