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功能的更多相关文章

  1. 个人小项目——Java实现WC功能

    这个小项目用了两种方法解决了该功能的实现. 1.两种方法的功能和具体实现 代码可以成功运行,但是有一些情况考虑不完整,一种方法用了FileOutputStream输出流,为了解决空格无法统计问题,对文 ...

  2. 小白のjava实现wc.exe功能

    GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c     //返回文件 file.c 的字符数 wc.exe -w file.c    //返回文件 file. ...

  3. JAVA实现WC.exe功能

    项目要求 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 具体功能要求: 程序处理用户需求的模式为: wc.exe [paramet ...

  4. 软件工程—WC功能实现 (JAVA)

    软件工程-WC功能实现(JAVA) Github项目地址:https://github.com/Ousyoung/wc 项目要求 ​ wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和 ...

  5. java实现wc

    github项目传送门:https://github.com/yanghuipeng/wc 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程 ...

  6. 个人项目:Java实现WC

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

  7. 【Java EE 学习 21 下】【 使用易宝支付接口实现java网上支付功能】

    一.网上支付分为两种情况,一种方法是使用直接和银行的支付接口,另外一种方法是使用第三方支付平台和银行对接完成支付. 1.直接和银行对接. 2.使用第三方支付平台 3.常见的第三方支付平台 二.使用易宝 ...

  8. 【Servlet】java web 文件下载功能实现

    需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 <!DOCTYPE html> & ...

  9. Java 7 新增功能

    Java 7 新增功能如下: 对二进制整数的支持,以0b或0B开头. 在数值中可以使用下划线,不管是整型数值,还是浮点型数值,都可以自由地使用下划线,这样可以直观地分辨数值常量中到底包含多少位.如:3 ...

随机推荐

  1. 转载:解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题

    转自:http://blog.csdn.net/psy1100/article/details/51179342 今天要将自己的API接口和MODEL导出来一份java doc参考文档, 但是在导出的 ...

  2. Hyperledger Fabric快速上手

    安装go curl -O https://storage.googleapis.com/golang/go1.10.2.linux-amd64.tar.gz tar -xvf go1.10.2.lin ...

  3. 平台调用之如何利用VS2013 C#调试C++DLL库

    对于托管代码调用非托管DLL文件,已经是非常普遍的事情,下面写一下如何通过托管代码(C#)像调试托管代码一样调试DLL中的代码. 注意:(1)[dll工程和调用dll的exe工程需要在同一个解决方案中 ...

  4. java代码关于匿名内部类和接口的方法使用

    总结:主要是多个按钮实现监听时,能够响应不同的事件 以上步骤我们可以用多种方法实现.但人们通常用二种方法.第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件:第二种方法是使用多个内 ...

  5. codeforce 985B Switches and Lamps(暴力+思维)

    Switches and Lamps time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  6. idea完成分支和主干的合并

    我们在开发一个项目的时候,我们可能会创建一个分支和一个主干.对于分支而言,我们一般在开发的时候可能会使用,但是在项目上线的时候,我们抽取的项目的地址可能是主干的svn地址,这时我们需要将分支上的svn ...

  7. python开发函数进阶:递归函数

    一,什么叫递归 #递归#在一个函数里调用自己#python递归最大层数限制 997#最大层数限制是python默认的,可以做修改#但是我们不建议你修改 例子和尚讲故事 #!/usr/bin/env p ...

  8. (转).Net基础体系和跨框架开发普及

    在园子里看到了一篇关于.net体系及框架开发的文章,感触颇深,身为一个.net程序员,发现自己在这方面的跟进和理解远远不够.转到自己这里,分享的同时方便日后查看. 原文链接: http://www.c ...

  9. python写一个能生成三种一句话木马的脚本

    代码: import time import os from threading import Thread import optparse def aspyijuhua(): try: juy=op ...

  10. day6心得

    面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思 ...