java实现wc功能
github项目地址:https://github.com/3216004717/ruanjiangongcheng.git
项目相关要求
基本要求
- wc.exe -c file.c //返回文件 file.c 的字符数(实现)
- wc.exe -w file.c //返回文件 file.c 的词的数目(实现)
- wc.exe -l file.c //返回文件 file.c 的行数(实现)
解题思路
- 困难描述
- 对于正则表达式的使用不太熟悉,所以在考虑统计单词数时花了很长时间
- 对main函数的参数不理解
- 做过哪些尝试
- 搜索与正则表达式的有关资料,然后自己尝试了很多匹配规则,发现很多情况都没有考虑到
- 在同学的指导下理解了main方法参数的含义
- 有何收获
- 回顾了之前学过的一些知识点,io流,正则表达式
- 接触到一些新知识,比如说使用单元测试,上传到guihub等等
设计实现过程
- 每个功能用一个方法实现,把所有方法封装成一个工具类
代码说明
- 统计字符数
- 先用isFile()方法判断传进来的参数是否有误
- 每次读取一行,统计每行字符串的长度
- 直到readLine()==null结束
- 输出结果
public static void countChar(String filepath) throws IOException {
File file = new File(filepath);
if (file.isFile()) {
BufferedReader br = new BufferedReader(new FileReader(file));
int count = 0;
String str = null;
while ((str = br.readLine()) != null) {
count+=str.length();
}
System.out.println(file.getName()+"的字符个数为:" + count);
br.close();
}else {
System.out.println("文件不存在");
}
- 统计单词数
- 先用isFile()方法判断传进来的参数是否有误
- 每次读取一行,用split(" ").length统计一行的单词数
- 直到readLine()==null结束
- 输出结果
public static void countWord(String filepath) throws IOException {
File file = new File(filepath);
if (file.isFile()) {
BufferedReader br = new BufferedReader(new FileReader(file));
int count = 0;
String line = null;
while ((line = br.readLine()) != null) {
count+=line.trim().split(" ").length;
}
System.out.println(file.getName()+"的单词个数为:" + count);
br.close();
}else {
System.out.println("文件不存在");
}
}
- 统计行数
- 先用isFile()方法判断传进来的参数是否有误
- 每次读取一行,若br.readLine() != null,则count++
- 直到readLine()==null结束
- 输出结果
public static void countLine(String filepath) throws IOException {
File file = new File(filepath);
if (file.isFile()) {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
int count = 0;
while (br.readLine() != null) {
count++;
}
System.out.println(file.getName()+"的行数为:" + count);
br.close();
}else {
System.out.println("文件不存在");
}
}
- main函数
- 用args[]获取从命令行传进来的参数
- 执行switch语句调用对应方法
public static void main(String[] args) throws IOException {
String param = args[0];
switch (param) {
case "-c":
CountUtils.countChar(args[1]);
break;
case "-w":
CountUtils.countWord(args[1]);
break;
case "-l":
CountUtils.countLine(args[1]);
break;
default:
System.out.println("参数有误");
}
}
- 测试类
public class CountUtilsTest {
@Test
public void testCountChar() throws IOException{
CountUtils.countChar("test/1.txt");
CountUtils.countChar("test/2.txt");
CountUtils.countChar("test/3.txt");
}
@Test
public void testCountWord() throws IOException{
CountUtils.countWord("test/1.txt");
CountUtils.countWord("test/2.txt");
CountUtils.countWord("test/3.txt");
}
@Test
public void testCountLine() throws IOException{
CountUtils.countLine("test/1.txt");
CountUtils.countLine("test/2.txt");
CountUtils.countLine("test/3.txt");
}
}
测试运行
- 测试结果

- 代码覆盖率

PSP
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 50 |
| · Estimate | · 估计这个任务需要多少时间 | 30 | 50 |
| Development | 开发 | 660 | 670 |
| · Analysis | · 需求分析 (包括学习新技术) | 120 | 100 |
| · Design Spec | · 生成设计文档 | 30 | 30 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 30 | 30 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
| · Design | · 具体设计 | 30 | 60 |
| · Coding | · 具体编码 | 300 | 240 |
| · Code Review | · 代码复审 | 30 | 60 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 60 | 120 |
| Reporting | 报告 | 150 | 160 |
| · Test Report | · 测试报告 | 90 | 120 |
| · Size Measurement | · 计算工作量 | 30 | 20 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 20 |
| 合计 | 840 | 880 |
项目小结
这次项目只实现了基本功能,可能因为对项目所用到的知识不太了解,还有就是以前学过的知识也基本忘记,所以做起来有点难度,分析功能时也考虑了很多种情况,但最后实现出来的结果很一般。
java实现wc功能的更多相关文章
- 个人小项目——Java实现WC功能
这个小项目用了两种方法解决了该功能的实现. 1.两种方法的功能和具体实现 代码可以成功运行,但是有一些情况考虑不完整,一种方法用了FileOutputStream输出流,为了解决空格无法统计问题,对文 ...
- 小白のjava实现wc.exe功能
GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c //返回文件 file.c 的字符数 wc.exe -w file.c //返回文件 file. ...
- JAVA实现WC.exe功能
项目要求 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 具体功能要求: 程序处理用户需求的模式为: wc.exe [paramet ...
- 软件工程—WC功能实现 (JAVA)
软件工程-WC功能实现(JAVA) Github项目地址:https://github.com/Ousyoung/wc 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和 ...
- java实现wc
github项目传送门:https://github.com/yanghuipeng/wc 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程 ...
- 个人项目:Java实现WC
Java实现WC Github项目地址:https://github.com/auxshaw/WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...
- 【Java EE 学习 21 下】【 使用易宝支付接口实现java网上支付功能】
一.网上支付分为两种情况,一种方法是使用直接和银行的支付接口,另外一种方法是使用第三方支付平台和银行对接完成支付. 1.直接和银行对接. 2.使用第三方支付平台 3.常见的第三方支付平台 二.使用易宝 ...
- 【Servlet】java web 文件下载功能实现
需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 <!DOCTYPE html> & ...
- Java 7 新增功能
Java 7 新增功能如下: 对二进制整数的支持,以0b或0B开头. 在数值中可以使用下划线,不管是整型数值,还是浮点型数值,都可以自由地使用下划线,这样可以直观地分辨数值常量中到底包含多少位.如:3 ...
随机推荐
- Python学习笔记之selenium 定制启动 chrome 的选项
在自动化中,默认情况下我们打开的就是一个普通的纯净的chrome浏览器,而我们平时在使用浏览器时,经常就添加一些插件,扩展,代理之类的应用.所以使用 selenium 时,我们可能需要对 chrome ...
- 学习FPGA需要做哪些
有些人比较差,做了一些介绍,有误导成分.有些人水平太高,介绍的很好,但是很多人依旧听不懂,得到的肯定很少.学习FPGA,在不同层次的人明显有不同的答案. 熟悉硬件描述语言语法,不需要什么都会,但是要记 ...
- Mongodb时间问题
Java保存到mongodb当前时间,使用RoboMongo查看数据显示时间比当前时间少8个小时,这是客户端的问题. MongoDB中的Date类型数据只保存绝对时间值,不保存时区信息,因此“显示的时 ...
- Java多线程总结【转】
多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程 ...
- mybatis 控制器注解介绍(一)
@RequestMapping("LoginController")public class LoginController { // 路径参数{name}填入用户名,{pass} ...
- 一个7重嵌套表EF添加语句,注意子表赋值过程中只需写子表主键赋值,不需要写子表外键=父表主键。EF创建时会自动将子表外键设为与父表主键相等
AIRPORT_HELIPORT tt = new AIRPORT_HELIPORT() { AIRPORT_HELIPORT_UUID = Gui ...
- Eclipse使用总结——使用Eclipse打包带源码的jar包
平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...
- 1.4 Application应用
使用celery第一件要做的最为重要的事情是需要先创建一个Celery实例,我们一般叫做celery应用,或者更简单直接叫做一个app.app应用是我们使用celery所有功能的入口,比如创建任务,管 ...
- leetcode852
int peakIndexInMountainArray(vector<int>& A) { int Len = A.size(); ; ; i < Len - ; i++) ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 4_Linear Regression with Multiple Variables 多变量线性回归
Lecture 4 Linear Regression with Multiple Variables 多变量线性回归 4.1 多维特征 Multiple Features4.2 多变量梯度下降 Gr ...