基于Java实现的WC统计程序

本文介绍了一个模仿wc.exe功能的命令行程序设计,该程序能够统计文本文件的字符数、单词数和行数。文章详细描述了程序的设计思路、实现过程,包括命令解析、正则表达式应用及测试运行情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


 

1. Github 地址:https://gitee.com/hzkkk/wc.git

2. PSP表格

PSP2.1预估耗时(分钟)实际耗时(分钟)
Planning 20   25
Estimate 200 240
Development 120 150
Analysis 20 20
Design Spec 20 20
Design Review 20 20
Coding Standard 10 15
Design 30 45
Coding 150 180
Code Review 20 15
Test 10 20
Reporting 30 40
Test Report 20 20
Size Measurement 10 10
Postmortem & Process Improvement Plan 20 30
  700 860

 

3. 解题思路

由于需要命令行来对程序进行控制,所以程序应该是先进行确定命令的规范形式,然后再实现对不同操作选项的命令解析,例如:wc -w -c -l filepath ,这条命令要能解析出需要对路径为filepath的文件实现词数,行数,字符数的统计功能,最后才是实现不同命令对应的统计功能。

4. 设计实现过程

包括两个类:WC、CountUtil。

WC包括主函数,主要进行命令的规范和解析;

CountUtil有三个函数

  • void count(String path, boolean c, boolean w, boolean l) 对文件进行统计,打印统计结果
  • ArrayList<File> getFiles(String path) 根据路径获取文件集合,如果路径为文件夹则调用第二个函数递归获取文件集合,为文件则直接返回
  • ArrayList<File> getFilesFromDir(String path, Boolean isDir) 递归获取文件夹下文件,返回文件集合

5. 代码说明

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            //读取控制台输入
            String command = scanner.nextLine();
            if (command.equals("exit"))
                break;
            //正则命令格式校验 格式为:wc (选项可多个)-c/w/l filepath(文件的绝对路径)
            String format = "^wc\\s+(\\-[cwl]\\s+){1,3}\\s*\\S+$";
            Pattern pattern = Pattern.compile(format);
            Matcher matcher = pattern.matcher(command);
            boolean isMatch = matcher.matches();
            if (!isMatch) {
                System.out.println("Error command!");
                break;
            }
            //选项匹配
            Pattern choosePattern = Pattern.compile("\\-[cwl]");
            Matcher chooseMatch = choosePattern.matcher(command);
            boolean c=false;
            boolean w=false;
            boolean l=false;
            while(chooseMatch.find()) {
                switch (chooseMatch.group().replace("-", "")) {
                    case "c":
                        c=true;
                        break;
                    case "w":
                        w=true;
                        break;
                    case "l":
                        l=true;
                        break;
                }
            }
            //根据最后匹配的空格索引截取文件路径
            int index = command.lastIndexOf(" ");
            String filePath = command.substring(index + 1);
            //调用count函数进行计算
            CountUtil.count(filePath,c,w,l);

        }

6. 测试运行 

(一) 空文件

(二)四个字符和一行的文件

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

由于正则表达式平时很少使用,在命令的匹配中一开始多多少少会有一些出错的地方,然后再去菜鸟教程上看了一遍,最后一遍遍的测试,终于是完成了。让我巩固了正则表达式的相关的一些操作,还了解了其他一些常用的例子,体会到了正则表达式的强大。

 

转载于:https://www.cnblogs.com/hzkkk/p/9606777.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值