java 实现wordcount_用JAVA实现WordCount程序

本文档详细介绍了使用Java实现WordCount程序的过程,包括项目简介、完成情况、解题思路、设计流程、代码说明和测试。实现了统计文本文件的字符数、单词数、行数以及扩展功能,如递归处理、代码行、空白行和注释行的统计。项目有助于提升对文件输入、正则表达式和字符串处理的理解。
摘要由CSDN通过智能技术生成

github项目地址:https://github.com/BiuBiuBangBoom/wc

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

30

40

· Estimate

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

180

240

Development

开发

150

180

· Analysis

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

15

15

· Design Spec

· 生成设计文档

20

20

· Design Review

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

20

25

· Coding Standard

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

10

15

· Design

· 具体设计

18

15

· Coding

· 具体编码

120

150

· Code Review

· 代码复审

30

35

· Test

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

10

10

Reporting

报告

15

20

· Test Report

· 测试报告

15

15

· Size Measurement

· 计算工作量

12

30

· Postmortem & Process Improvement Plan

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

15

15

合计

635

825

一.项目简介

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

二.完成情况

基本功能:

[x] -c ,统计文件字符数。

[x] -w ,统计文件单词数。

[x] -l ,统计文件行数数。

扩展功能

[x] -s ,递归符合条件的文件。

[x] -a ,统计文件代码行,空白行,注释行。

说明:以上命令可叠加使用,即 -c -w -l ,统计文件的字符数,单词数和行数。

三.解题思路

1.利用正则表达式校验输入参数,然后解析出相关参数和文件地址。

2.利用正则表达式和BufferReader的readline()方法进行各种计数

四.设计流程

000b0990aa139a98c281a5c2d2a94c97.png

项目中含有一个包,里面里有一个实现功能的主类,及一个测试用的类。其中主类中包含主函数,递归处理文件函数,行计数函数,词计数函数,字符计数函数,拓展功能实现函数。

五.代码说明

递归收集文件夹下符合要求的文件

public voidgetFolders(String filepath) {

File file= newFile(filepath);

File[] folders=file.listFiles();if (folders.length == 0)return;else

for(File f : folders) {if(f.isDirectory())

getFolders(f.getAbsolutePath());//递归文件夹

else if (f.getName().endsWith("java"))

files.add(f);

}

}

计算词数

public void wordsCount(String filepath) throwsIOException {int count = 0;

File file= newFile(filepath);

BufferedReader br= new BufferedReader(newFileReader(file));

String line;

Pattern pa= Pattern.compile("[\u4e00-\u9fa5]");while((line = br.readLine()) != null) {

String[] str= line.split("\\W+");for(String word : str) {if(!word.equals("") && !pa.matcher(word).find())//检查是否有中文或空字符

count++;

}

}

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

br.close();return;

}

计算字符数

public void charCount(String filepath) throwsIOException {int count = 0;

File file= newFile(filepath);

BufferedReader br= new BufferedReader(newFileReader(file));

String line1, line2;while((line1 = br.readLine()) != null) {

line2= line1.replaceAll("\\s+", "");//将空白符删去

count +=line2.length();

}

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

br.close();return;

}

计算行数

public void linesCount(String filepath) throwsIOException {int count = 0;

File file= newFile(filepath);

BufferedReader br= new BufferedReader(newFileReader(file));while(br.readLine() != null)

count++;

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

br.close();return;

}

拓展功能实现,计算空白行,注释行,代码行

public void advancedCount(String filepath) throwsIOException {int emptyLineCount = 0;int codeLineCount = 0;int comLineCount = 0;

File file= newFile(filepath);

BufferedReader br= new BufferedReader(newFileReader(file));

String line;while((line = br.readLine()) != null) {if(Pattern.compile("^\\s*\\S?\\s*$").matcher(line).matches())//检验空行

emptyLineCount++;else if(line.contains("//"))

comLineCount++;elsecodeLineCount++;

}

System.out.println("空行:" +emptyLineCount);

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

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

br.close();return;

}

六.测试

程序启动

1071440966ff521484303fe3280e355c.png

测试空文件

3bce100d29ed48f3842188f67fe2d93c.png

79183c62571807a10e23d3415d969457.png

只有一个字符的文件

b33154a29bb6ff7ba173b2aa9b8b60e5.png

47f71dd74fae4621daa30b1f9e2463bd.png

递归文件调用

36547313b511fd7262c976152c90b5ad.png

七.项目总结

通过本次项目,我对于从前比较模糊的文件输入跟正则表达式有了较好的掌握,同时也对字符串类型方法有了更深的了解。在开发过程中,我经常遇到不知道如何实现某个功能,但通过查看文档往往会发现有很多很好用的方法,使我对功能的实现有了灵感。就此我深感文档对于开发的重要性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值