GitHub仓库:https://github.com/douyazai/WCbase

一.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 的行数(实现)

扩展功能:
    -s   递归处理目录下符合条件的文件。(未实现)
    -a   返回更复杂的数据(代码行 / 空行 / 注释行)。(实现)

空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

代码行:本行包括多于一个字符的代码。

注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

} //注释
在这种情况下,这一行属于注释行。

[file_name]: 文件或目录名,可以处理一般通配符。

高级功能:

-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。(未实现)

需求举例:
  wc.exe -s -a *.c

返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。

二.解题思路

1.首先要对文件进行基本的读取操作,InputStreamReader(new FileInputStream(绝对文件名))进行文件的读取。

2.由于需要统计行数,所以用BufferedReader(文件读取)调用readLine()的方法。

3.功能的分配。

4.基本功能的实现。

三.遇到的问题及解决方法

1.不知道如何对字符串进行分割,不懂的正则表达式的使用。

解决方法:通过网上搜索其用法并且自己不断地修改才清楚如何对字符串进行分割。

四.设计过程

五.关键代码说明

1.获取从控制台输入的文件路径,将功能与文件路径根据空格分成两个字符串,首字符串可以确定返回的数据。

为了能够一行一行的获取信息,采用BufferedReader(文件读取)调用readLine()的方法。代码如下:

 Scanner input = new Scanner(System.in);
String road = input.nextLine();
String array[] = road.split("\\s"); FileInputStream file = new FileInputStream(array[1]);
InputStreamReader isr = new InputStreamReader(file);
BufferedReader br = new BufferedReader(isr);

2.各功能的实现可在while和if语句下实现,因为是按行读取,所以每次增加一即可计算出行的数目。

 while(br.read()!=-1)
{
String s = br.readLine();
if (s.length() <= 1) // 判断空行
{
BlankLine++; }
else
{
Charcount += s.length();//字符个数就是字符长度
Wordcount += s.split(" ").length;//split() 方法用于把一个字符串分割成字符串数组,字符串数组的长度,就是单词个数
CodeLine++;
}
Linecount = CodeLine + BlankLine ;
}

3.结果的输出采用switch语句,根据输入的-X功能的不同来选择返回的数据。

 switch(array[0])
{
case "-c": System.out.println("字符数 "+Charcount);
break;
case "-w": System.out.println("单词数 "+Wordcount);
break;
case "-l": System.out.println("总行数 "+Linecount);
break;
case "-a": System.out.println("代码行数 "+CodeLine);
System.out.println("注释行数:未实现");
System.out.println("空白行数 "+BlankLine);
break;
case "-all":System.out.println("字符数 "+Charcount);
System.out.println("单词数 "+Wordcount );
System.out.println("代码行数 "+CodeLine);
System.out.println("注释行数:未实现");
System.out.println("空白行数 "+BlankLine);
System.out.println("总行数 "+Linecount);
break; default:
System.out.println("参数输入不正确");
}

六.测试

测试文件:

测试结果:

-all

-a

代码覆盖率:

因为有switch中的部分没有运行,所有覆盖率较低

七.总结

由于本身学习不到位,而且对于Java的开发少之又少,一年前学习的java现在已经几乎不会使用了,不得不从新翻开书本对知识点进行温习,但由于实践过少,对小项目的开发完全把不准。

清楚了一个软件开发者的工作量,虽然这次的项目简单,但对于基础差的我来说是一个大项目了,希望能够克服困难,边做边学,做到每天进步一点点。

PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

120

150

· Estimate

· 估计这个任务需要多少时间

500

760

00Development

开发

400

560

· Analysis

· 需求分析 (包括学习新技术)

200

160

· Design Spec

· 生成设计文档

80

90

· Design Review

· 设计复审 (和同事审核设计文档)

0

0

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

20

35

· Design

· 具体设计

60

55

· Coding

· 具体编码

500

560

· Code Review

· 代码复审

40

60

· Test

· 测试(自我测试,修改代码,提交修改)

22

40

Reporting

报告

60

100

· Test Report

· 测试报告

20

30

· Size Measurement

· 计算工作量

50

40

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

20

38

合计

600

 760

Java实现WC基本功能的更多相关文章

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

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

  2. JAVA实现WC.exe功能

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

  3. Java实现wc部分功能

    GitHub仓库:https://github.com/TaoTaoLv1/WcProject 一.开发前PSP表格预估* PSP2.1 Personal Software Process Stage ...

  4. 个人项目:Java实现WC

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

  5. Java 基本数据类型 sizeof 功能

    Java 基本数据类型 sizeof 功能 来源 https://blog.csdn.net/ithomer/article/details/7310008 Java基本数据类型int     32b ...

  6. 通过python实现wc基本功能

    ---恢复内容开始--- 1.Github项目地址: https://github.com/zhg1998/ww/blob/master/wc.py 2.项目相关要求: 写一个命令行程序,模仿已有wc ...

  7. Java实现发邮件功能---网易邮箱

    目录 Java实现发邮件功能 前言 开发环境 代码 效果 结束语 Java实现发邮件功能 前言 电子邮件的应用场景非常广泛,例如新用户加入,即时发送优惠清单.通过邮件找回密码.监听后台程序,出现异常自 ...

  8. Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比

    Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比: Unix/Linux (Bash) Windows(MS-DOS) Java 进入目录 cd cd - 创建 ...

  9. ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能

    一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...

随机推荐

  1. SpringCloud之客户端连接Eureka集群

    客户端分别yml: ###服务启动端口号 server: port: 8002 ###服务名称(服务注册到eureka名称) spring: application: name: app-toov5- ...

  2. 算法(Algorithms)第4版 练习 1.5.15

    用归纳法推导: 1.height = 0时,成立,其level 0的节点个数为C(0,0)=1. height = 1时,成立,其level 0的节点个数为C(1,0)=1,其level 1的节点个数 ...

  3. [转]Tomcat启动分析

    [转]Tomcat启动分析 原帖 http://docs.huihoo.com/apache/tomcat/heavyz/01-startup.html 以下摘录了部分 --------------- ...

  4. linux lvm

    一.linux的lv(logical volume) lv各层次示例图如下: 核心思想:最底层的pv就是一个一个的磁盘,在保证总体容量的情况下,可以移除部分磁盘,在pv上面设置一个vg,相当于vg把所 ...

  5. JQUERY Uploadify 3.1 C#使用案例

    近来因为要做一个上传功能,而firefox又不能直接使用file这样的标签,所以试着用js来写了一个,结果发现代码太多,验证太复杂,而且效果也不理想. 相对的,jquery提供的这一套uploadif ...

  6. linux命令学习笔记(53):route命令

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两 个不同的子网之间的通信,需要一台连接两个网络的路由器, ...

  7. Struts2 - 值栈(ValueStack)

    1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...

  8. Android之setContentView和LayoutInflater

    setContentView: 1.常用的构造函数: 1)setContentView(int layoutResID) 2)setContentView(View view) 3)setConten ...

  9. 雅礼集训 2017 Day2 水箱 可并堆

    题目描述 给出一个长度为 n 宽度为 1 ,高度无限的水箱,有 n−1  个挡板将其分为 n 个 1 - 1 的小格,然后向每个小格中注水,水如果超过挡板就会溢出到挡板的另一边,这里的水是满足物理定律 ...

  10. luogu2622开灯问题2

    #include<iostream> #include<cstdlib> #include<algorithm> #include<cstdio> #i ...