java实现wc.

GitHub项目地址

一:项目相关要求

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

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 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。

 

二:设计思路

1.首先要对文件进行基本的读取操作,通过InputStreamRead进行文件的读取,获得其具体对象。

2.用BufferedReader调用readLine()的方法,根据这个对象给予我们的内容,通过命令计算出字符、词、行。

3.输出采用switch语句实现“-c,-w,-l”的基本功能。

三:流程图

 

四:PSP表格

 

 

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

90

· Estimate

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

180

500

Development

开发

500

520

· Analysis

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

120

150

· Design Spec

· 生成设计文档

30

50

· Design Review

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

20

30

· Coding Standard

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

30

20

· Design

· 具体设计

50

60

· Coding

· 具体编码

30

35

· Code Review

· 代码复审

30

50

· Test

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

30

60

Reporting

报告

20

60

· Test Report

· 测试报告

20

25

· Size Measurement

· 计算工作量

50

50

· Postmortem & Process Improvement Plan

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

20

30

合计

 

1190

1730

五:代码

 读取文件

System.out.println("在此输入文件路径:");
                Scanner input = new Scanner(System.in);
                while(true) {
                    String path = input.next();
                    File file = new File(path);
                    InputStreamReader ir = new 
                 InputStreamReader(new FileInputStream(path));
                    BufferedReader br = new BufferedReader(ir);

 

统计字符数、次数、行数

                        int charcount = 0;
                        int wordcount = 0;
                        int linecount = 0;
                        while(br.read()!= -1){
                            String s = br.readLine();                            
                            charcount += s.length();
                            linecount++;
                            String[] str=null;              
                            if(!"".equals(s)) {                                    
                                str = s.replaceAll("[^A-Za-z]"," ").trim().split("\\s+");
                                for(int j = 0;j<str.length;j++) {
                                if(str[j].matches("[A-Za-z]+")){
                                wordcount ++;
                                }
                                }                  
                        }
                    }
                    ir.close();

 

 

输出采用switch函数,根据输入不同的参数获得不同的返回值

 

System.out.println("在此输入您想执行的命令:"); 
                Scanner sc=new Scanner(System.in); 
                String line = sc.nextLine();       
                switch(line) {
                case"-c":
                    System.out.println("该文本的字符数为"+charcount);
                    break;
                case"-w":
                    System.out.println("该文本的单词数为"+wordcount);
                    break;
                case"-l":
                    System.out.println("该文本的行数为 "+linecount);
                    break;
                }

 

 六、测试

测试文件

 

测试结果

 

 

 七:总结

距离本人上次接触java已经过了差不多一年,这期间并没好好重视编程语言,所以这次作业写得非常吃力,非常多细节其实都是通过网上查询或者请教同学得来的。

这是本人第一次的软工作业,并不满意,望能重新审视自己。

 

转载于:https://www.cnblogs.com/JerryQgoYoung/p/9649127.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值