Github地址:https://github.com/LYhiha/wcexe

1.项目相关要求

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

具体功能要求:

基本功能列表:

wc.exe -c

file.c     //返回文件

file.c 的字符数(实现)

wc.exe -w

file.c    //返回文件

file.c 的词的数目 (实现)

wc.exe -l

file.c      //返回文件

file.c 的行数(实现)

扩展功能:

wc.exe   -s   递归处理目录下符合条件的文件。(实现)

wc.exe -a   返回更复杂的数据(代码行 / 空行 / 注释行)。(实现)

2.解题思路

2.遇到的困难及解决方法

困难描述

1.字符数、单词数、注释行的统计。

2.对main函数传入各项参数处理不好。

3.对递归处理不熟练。

做过哪些尝试

1.重新复习了字符串的处理方法。

2.尝试了从main方法传参,但不熟练使用,最后用键盘输入方式输入命令。

3.使用 exe4j 软件把 jar 包转成 .exe 文件

是否解决

1.程序基本功能实现,但又瑕疵

有何收获

1.重新复习了IO流String类的使用。

2.尝试了从mian方法传参数。

3.首次把代码推上github。

3.解题思路

每个方法实现一个功能,然后在main方法中使用输入流从控制台输入命令,用switch语句判断输入的命令,调用相应的方法,方法需要传入文件路径的参数也控制台输入。

4.设计实现过程

共有一个类Wcexe,类中有6个方法分别实现不同的功能,由main()方法调用。

5.代码说明

1.main:方法:创建输入流从控制台输入命令,对命令进行处理调用相应方法,并循环处理输入的命令。

public static void main(String[] args) {

try{

Wcexe wc = null;

while(true) {

System.out.println("请输入命令:(输入wc.exe help获取帮助)");

BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));

String keyInput = keyReader.readLine();

if("-q".equals(keyInput)) {

break;

}

String[] command = keyInput.trim().split(" ");

if(command.length<3) {

}else {

path = command[2];

wc = new Wcexe();

}

switch (command[1]) {

case "-c":

wc.countChar();

break;

case "-w":

wc.countWord();

break;

case "-l":

wc.countLine();

break;

case"-a":

wc.countdifLine();

break;

case"-s":

wc.traverseDir(wc.filepath);

break;

case"help":

Wcexe.help();

break;

default:

System.out.println("请输入正确命令,输入wc.exe help 获取帮助.............");

break;

}

}

}catch(Exception e) {

System.out.println("请检查输入命令与文件路径是否正确,重启程序输入wc.exe help 获取帮助.............");

}

}

2.help()方法:打印帮助信息

public static void help() {

System.out.println("");

System.out.println("wc.exe -l 文件名(完整路径) 获取行数");

System.out.println("wc.exe -c 文件名(完整路径)获取字符数");

System.out.println("wc.exe -w 文件名(完整路径) 获取单词数");

System.out.println("wc.exe -a 文件名(完整路径)获取空行,注释行,代码行数");

System.out.println("wc.exe -s 文件夹(完整路径)遍历处理文件夹");

System.out.println(" ");

}

3.countLine()方法:计算行数,使用BufferedReaderd缓冲输入流readLine()方法读取文件,每读一行,行数+1。

public void countLine() throws IOException {

//初始化属性

int lineNum = 0;

FileReader inputReader = new FileReader(filepath);

BufferedReader bufReader = new BufferedReader(inputReader);

String line ;

while( ( line = bufReader.readLine() ) != null) {

lineNum++;

}

System.out.println("总行数:"+lineNum);

bufReader.close();

}

4.countChar()方法:计算字符数,每读取一行存入一字符串,将一行按照空格分割并存进一字符串数组,用for循环获取每个字符串长度并相加。

public void countChar() throws IOException {

int charNum = 0;

FileReader inputReader = new FileReader(filepath);

BufferedReader bufReader = new BufferedReader(inputReader);

String line ;

while( ( line = bufReader.readLine() ) != null) {

String [ ] str = line.split(" ");

for(int i=0;i

charNum +=str[i].length();

}

}

System.out.println("字符数:"+charNum);

bufReader.close();

}

5.countWord()方法:计算单词个数,每读取一行,将非英文字符都替换成空格,再以空格分割存进一字符串数组,for循环遍历数组,如果符合给定正则表达式的便将单词数加1。

public void countWord() throws IOException {

int wordNum = 0;

FileReader inputReader = new FileReader(filepath);

BufferedReader bufReader = new BufferedReader(inputReader);

String line ;

while( ( line = bufReader.readLine() ) != null) {

String[] str1=null;

if(!"".equals(line)) {

str1 = line.replaceAll("[^A-Za-z]"," ").trim().split("\\s+");

for(int j = 0;j

if(str1[j].matches("[A-Za-z]+")){

wordNum ++;;

}

}

}

}

System.out.println("单词数:"+wordNum);

bufReader.close();

}

6.countdifLine()方法:计算空行、注释行、空行,每读一行用if语句判断,另设置flag标记/*   */注释块地开始。

//计算空行、注释行、代码行

public void countdifLine() throws IOException {

int blankLine = 0;

int codeLine = 0;

int annotateLine = 0;

FileReader inputReader = new FileReader(filepath);

BufferedReader bufReader = new BufferedReader(inputReader);

String line;

boolean flag = false;//用于标记/* */注释行

while( ( line = bufReader.readLine() ) != null) {

if(line.trim().startsWith("/*") && line.trim().endsWith("*/")) {

annotateLine++;

}else if(line.trim().startsWith("/*") && !line.trim().endsWith("*/")) {

annotateLine++;

flag = true;

}else if(flag == true&&!line.trim().endsWith("*/")) {

annotateLine++;

}else if(flag == true && line.trim().endsWith("*/")) {

annotateLine++;

flag = false;

}else if(line.trim().startsWith("//") || line.trim().startsWith("}//")) {

annotateLine++;

}else if(line.trim().matches("")) {

blankLine++;

}else{

codeLine++;

}

}

bufReader.close();

System.out.println("代码行"+codeLine);

System.out.println("注释行"+annotateLine);

System.out.println("空 行"+blankLine);

}

7.traverseDir()方法:递归遍历文件夹并处理文件

//遍历文件夹

public void traverseDir(File filepath) {

File[] files;

files = filepath.listFiles();

if(files != null) {

for(File file : files) {

if(file.isFile()) {

path=file.getAbsolutePath();

System.out.println("文件名:"+path);

Wcexe wc1=new Wcexe();

try {//处理遍历到的文件

wc1.countChar();

wc1.countWord();

wc1.countLine();

wc1.countdifLine();

} catch (IOException e) {

e.printStackTrace();

}

}else if(file.isDirectory()) {

traverseDir(file.getAbsoluteFile());//递归

}

}

}

}

6.测试结果

运行结果:

代码覆盖率:

7.PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

700

765

· Estimate

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

10

5

Development

开发

150

160

· Analysis

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

90

120

· Design Spec

·生成设计文档

30

25

· Design Review

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

15

15

· Coding Standard

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

30

30

· Design

·具体设计

60

70

· Coding

·具体编码

120

150

· Code Review

·代码复审

30

30

· Test

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

60

90

Reporting

报告

45

60

· Test Report

·测试报告

30

20

· Size Measurement

·计算工作量

10

15

· Postmortem & Process Improvement Plan

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

20

25

合计

700

765

8.项目小结

这此的项目开发让我接触了很多新的概念方法,之前写课设时i都是想到神么写什么,以至于写的过程很乱,代码结构混乱,这次有稍稍改变。还有这次初步了解了,单元测试,回归测试,PSP等概念方法,以后尽可能要更多地运用。

Java编写数据统计程序_个人项目--wc文本统计程序(Java实现)相关推荐

  1. java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题

    在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...

  2. Win32控制台应用程序,Win32项目,MFC应用程序的区别与联系

    Win32控制台应用程序,Win32项目,MFC应用程序的区别与联系 Win32控制台程序 初始化代码模板以Main为程序入口,默认情况下,只链接C++运行时库和一些核心的Win32库,链接器subs ...

  3. 用java编写输出欢迎光临_编写一个完整的Java applet程序,程序功能为:在屏幕上输出“欢迎光临Java世界!”的字符串信息。...

    Applet程序开发主要步骤如下: 1)选用EDIT或Windows Notepad等工具作为编辑器建立Java Applet源程序. 2)把Applet的源程序转换为字节码文件. 3)编制使用cla ...

  4. java个人介绍代码_个人项目WC(Java)

    1.WC项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词 ...

  5. java编写计算类加减乘除_老师要求张浩使用面向对象的思想编写一个计算器类(Calculator),可以实现两个整数的加减乘除的运算.java...

    导航:网站首页 > 老师要求张浩使用面向对象的思想编写一个计算器类(Calculator),可以实现两个整数的加减乘除的运算.java 时间:2019-4-10 老师要求张浩使用面向对象的思想编 ...

  6. 大数据开发基础入门与项目实战(一)Java SE之1.初识计算机和Java语言

    文章目录 前言 1.计算机的体系结构 (1)计算机的基本概念 (2)常见的主要硬件 (3)主要硬件的详解 Ⅰ CPU Ⅱ 内存 Ⅲ 硬盘 Ⅳ 输入输出设备 (4)常见的主要软件 (5)计算机的体系结构 ...

  7. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  8. java导出数据透视表_使用数据库中的Java流制作数据透视表

    java导出数据透视表 来自数据库行和表的原始数据不能为人类读者提供太多了解. 相反,如果我们对数据执行某种聚合,则人类更有可能看到数据模式 在向我们展示之前. 数据透视表是聚合的一种特定形式,我们可 ...

  9. java lr分析表建立程序_[源码和文档分享]基于Java实现的LR(1)分析法语法分析程序...

    一 需求分析 自行定义文法, 运用语法分析方法对输入语句进行语法分析并输出结果,加深对语法分析过程的理解. 二 程序设计 2.1 总体思路 此次实验使用java编写.程序读取输入的token序列(如i ...

最新文章

  1. oracle编程艺术在线,oracle编程艺术笔记-1
  2. 为什么kafka使用磁盘而不是内存
  3. mysql笔记 doc_Mysql DOC阅读笔记
  4. 填写实验计算机桌面的系统图标有,Win8系统桌面添加计算机图标的图文步骤
  5. 递归函数之阶乘的实现
  6. vs2005菜单:工具-选项-环境
  7. 多个if和一个ifelse的区别
  8. html中可以编辑的文本,用BeautifulSoup编辑html中的文本
  9. 【python技能树】python编码规范
  10. vc 编译的那些事儿 - wowolook的专栏 - CSDN博客
  11. ResultSet大数据量导致内存溢出
  12. FGFA(Flow-Guided Feature Aggregation for Video Object Detection)论文详读
  13. Excel如何快速查找出图片?
  14. Java使用Spire.Doc实现Word文档添加图片水印
  15. UE4 令Actor对象在Editor下执行Tick
  16. 【云原生 | 03】裸金属架构之服务器安装VMWare ESXI虚拟化平台详细流程
  17. 拼多多稽查系统升级,现在还有3个稳定出评
  18. 从线下棋牌室到棋牌游戏开发平台 棋牌游戏行业发生了太多变化
  19. H3C网络搭建入门(H3C、Oracle、CRT三种软件的关联,以便于模拟实际)
  20. MS Visual Studio 2008 编译错误 microsoft visual studio 9.0\vc\include\new.h(60) : error C2065: '_In_opt_

热门文章

  1. 层次模型的概念,举出三个层次模型的实例!
  2. chrome如何手动同步?
  3. [ 安装 ] MySQL安装步骤!
  4. 从简易计算器到设计模式(策略、简单工厂)
  5. 在windows cmd中正确使用cd命令切换文件目录
  6. Java面试手写编程题(面试官经常让人手写)
  7. 在小程序中显示地图并添加标注的教程
  8. 计算机二级web题型及分值,2016年全国计算机二级《Web程序设计》考试大纲
  9. Stenffensen加速迭代法
  10. SubstancePainter零基础快速入门教程