Java实现WC基本功能

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()的方法。代码如下:

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

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

 1 while(br.read()!=-1)
 2           {
 3             String s = br.readLine();
 4               if (s.length() <= 1) // 判断空行
 5                {
 6                    BlankLine++;
 7
 8               }
 9               else
10               {
11            Charcount += s.length();//字符个数就是字符长度
12            Wordcount += s.split(" ").length;//split() 方法用于把一个字符串分割成字符串数组,字符串数组的长度,就是单词个数
13            CodeLine++;
14               }
15               Linecount = CodeLine + BlankLine ;
16            }

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

 1 switch(array[0])
 2         {
 3         case "-c": System.out.println("字符数 "+Charcount);
 4                     break;
 5         case "-w": System.out.println("单词数 "+Wordcount);
 6                     break;
 7         case "-l": System.out.println("总行数 "+Linecount);
 8                     break;
 9         case "-a": System.out.println("代码行数 "+CodeLine);
10                    System.out.println("注释行数:未实现");
11                    System.out.println("空白行数 "+BlankLine);
12                    break;
13         case "-all":System.out.println("字符数 "+Charcount);
14                     System.out.println("单词数 "+Wordcount );
15                     System.out.println("代码行数 "+CodeLine);
16                     System.out.println("注释行数:未实现");
17                     System.out.println("空白行数 "+BlankLine);
18                     System.out.println("总行数 "+Linecount);
19                     break;
20
21         default:
22             System.out.println("参数输入不正确");
23       }

六.测试

测试文件:

测试结果:

-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

原文地址:https://www.cnblogs.com/QQ760710450/p/9643886.html

时间: 2024-08-03 02:41:55

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

小白のjava实现wc.exe功能

GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c     //返回文件 file.c 的字符数 wc.exe -w file.c    //返回文件 file.c 的词的数目 wc.exe -l file.c      //返回文件 file.c 的行数 扩展功能(已实现) -s   递归处理目录下符合条件的文件.    -a   返回更复杂的数据(代码行 / 空行 / 注释行). 空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的

Java实现WC.exe功能

1 WC 项目要求 项目地址:https://github.com/LIBULULU/yy wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数. 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 具体功能要求: 程序处理用户需求的模式为: wc.exe [parameter] [file_na

Java实现wc部分功能

GitHub仓库:https://github.com/TaoTaoLv1/WcProject 一.开发前PSP表格预估* PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 30 · Estimate · 估计这个任务需要多少时间 30 30 Development 开发 464 655 · Analysis · 需求分析 (包括学习新技术) 20 30 · Design Spec · 生成设计文档

JAVA UI 拖拽功能

java GUI拖拽功能是很实用也相对高级一些的功能. 有一小部分的GUI控件支持他们有dragEnabled属性.这些JComponent包括:javax.swing.JColorChooserjavax.swing.JFileChooserjavax.swing.JListjavax.swing.JTablejavax.swing.JTreejavax.swing.text.JTextComponent 大部分的控件不支持没有这个属性,尤其是常用的jpanel和jframe. 一种简单的方法

Java UDP实现聊天功能代码

我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务器端需要阻塞式等待客户端的连接.而UDP则是可以直接向目的地址的目的端口上发送数据包,由于它只负责发送出去就好,不管对方是否正确接受到与否,所以当网络性能不好时它容易出现丢包的问题.(注意:UDP是基于数据报为单位进行传输的,而TCP是一种基于流进行传输的) 但是UDP很好的模拟了我们呢平时聊天的方式,可以很好的实现连续多次发送和接受,也就是简单的QQ聊天的功能. 现在来简要介绍Java中有关UDP编程相关的类:

Java基础:多功能小窗口,swing,io,net综合应用

概念原理的理解,不代表能熟练应用. 如果将多个知识点关联并应用起来,这能加快我们对知识的掌握. 作为一个初学者,最快速的上手方式应该就是学以致用了. 下面做了一个小窗口,主要是为了综合应用java的一些基础功能,界面稍显随意. 界面: 具体功能以及代码: 1 /*具体实现功能: 2 * 1.根据地址栏的路径打开文本文件,显示在文本区域. 3 * 2.根据地址栏的网址获取网页源代码,显示在文本区域. 4 * 3.通过打开按钮打开本地文本文件,显示在文本区域. 5 * 4.通过保存按钮,把文本区域内

java—servlet实现文件下载功能

最近在学javaweb技术,利用所学知识做了一个简单的项目,在服务器上实现给用户下载文件的功能.自动列出文件夹下的文件提供下载,支持中文文件名. 结果图 其中使用了tomcat来部署服务器,代码中应用了少许EL表达式和JSTL标签,使用了jsp和servlet,当然还有java和http的基础知识,但是个人觉得重点是http的Content-Disposition头信息和Content-type头信息在servlet中下载方面的应用,详见DownloadPageServlet.java源码. 关

Java中读取Excel功能实现_POI

这里使用apache的poi进行读取excel 1,新建javaproject 项目:TestExcel 2,导入包 包下载地址:http://poi.apache.org/download.html#POI-3.10-FINAL 百度网盘下载:http://pan.baidu.com/s/1i365mQT 导入根目录下.lib.ooxml-lib下的所有jar 4,操作读取excel import java.io.File; import java.io.IOException; import

Java中Excel导入功能实现、excel导入公共方法_POI -

这是一个思路希望能帮助到大家:如果大家有更好的解决方法希望分享出来 公司导入是这样做的 每个到导入的地方 @Override public List<DataImportMessage> materialDataImport2(byte[] fileBytes, String fileName) { //return DataImport(fileBytes, fileName, "inv_m"); File file = FileUtils.getFileFromByte