java实现wc

Posted huangxuming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现wc相关的知识,希望对你有一定的参考价值。

GitHub地址:https://github.com/Huangxuming10/wc/tree/master/WC/src/WC

项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

基本要求

? -c [filename]统计文件字符数(实现
-w [filename]统计文件词数(实现
-l [filename]统计文件行数(实现

扩展功能
-s [filename]递归处理目录下符合条件得文件
-a [filename]返回文件代码行 / 空行 / 注释行
? 支持各种文件的通配符(*,?)
高级功能
-x 图形化界面

 PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30  40

· Estimate

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

 30  30

Development

开发

 120  180

· Analysis

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

 150  240

· Design Spec

· 生成设计文档

60  150

· Design Review

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

60  120

· Coding Standard

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

 60  120

· Design

· 具体设计

 60  80

· Coding

· 具体编码

400 600

· Code Review

· 代码复审

 60  90

· Test

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

 60  60

Reporting

报告

 120  150

· Test Report

· 测试报告

 120 90

· Size Measurement

· 计算工作量

 30  60

· Postmortem & Process Improvement Plan

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

 60  120

合计

   1420  1930

解题思路

功能:-c [filename]统计文件字符数

实现:逐行读取文件,直到文件读取完毕,计算所有字符数目,去掉每行空字符后,统计个数,累加

功能:-w [filename]统计文件词数

实现:逐行读取文件,判断是否为字符,累加字符串数组长度,直到文件读取完毕

功能:-l [filename]统计文件行数

实现:逐行读取文件,每读取一行,行数加一,直到文件读取完毕

 设计实现

运行程序,main方法启动,系统显示使用说明,再通过用户键入得到命令,读取输入命令内容,判断命令和文件路径是否正确,然后用switch语句读取命令,判断命令,调用各类方法实现各个功能。

代码说明 

main函数

显示使用说明,数据的输入输出处理,使用nextLine实现命令的提取,使用split分割命令,调用方法实现功能

public static void main (String[] args) throws IOException {

do {
System.out.println("-c [文件路径] 返回文件字符数");
System.out.println("-w [文件路径] 返回文件词数");
System.out.println("-l [文件路径] 返回文件行数");

System.out.println("请输入命令:");
Scanner m=new Scanner(System.in); //读取输入的命令
String n=m.nextLine(); //读取输入命令
String arr[]=n.split("\\s"); //读取输入命令的每一个以空格为间隔的单词
File file=new File(arr[1]);

try {
switch (arr[0]) {
case "-c":System.out.println("字符数:"+chars);break; //返回文件字符数
case "-w":System.out.println("词数:"+words);break; //返回文件词数
case "-l":System.out.println("行数:"+lines);break; //返回文件行数
default:System.out.println("输入命令错误!");break; //返回发生错误
}
} catch (Exception e) {
System.out.println("发生错误:文件读入发生异常!");
}

}

实现-c-w-l

读取文件,计算所有字符数目,判断为字符,字符数chars加一,逐行读取文件,若遇到换行符,这行数lines加一,读取文件,以空格为条件判断为一个词,词的数目words加一

int chars=0;
int words=1;
int lines=1;

FileInputStream f=new FileInputStream(file); //读取文件
int a=0;
Boolean b=false;
String c=" ";
while ((a=f.read())!=-1) {
chars++;
if(a==‘ ‘) {
lines++;

}
if(c.indexOf(a)!=-1) {
if(b) {
words++;

}
b=false;
}
else {
b=true;
}
}

运行测试

测试一个字符的文件

技术分享图片

 

测试一个词的文件

 技术分享图片

 

测试一个源文件

 技术分享图片

 项目小结

   1.对于java语言比较陌生,很多知识点都忘了,很多时候都是靠百度来解决问题,然后不断来理解其中代码,明确到搜索资料的重要性

   2.对于Git、GitHub有了初步的了解,对于单元测试不太懂。

  3.此次项目是软件工程的第一次项目,总的来说感觉自己做的有些仓促,许多细节的地方还有优化的空间,还有一些扩展功能可以实现,但是没有足够的时间。

 




















































以上是关于java实现wc的主要内容,如果未能解决你的问题,请参考以下文章

如何用Java实现URLEncode

如何用Java实现URLEncode

java如何实现链表

java中,一个类实现了某个接口,啥意思?实现它,可以干啥

接口与具体实现(Java)

Java中的接口怎么实现?