• java实现wc


    github项目传送门:https://github.com/yanghuipeng/wc

    项目要求

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

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

    • 基本功能列表
    1. -c    [文件名]  返回文件的字符数
    2. -w   [文件名]  返回文件词的数目
    3. -l     [文件名]  返回文件的行数 

    PSP开发耗时

    PSP2.1

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

     30

     40

    · Estimate

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

     30

     50

    Development

    开发

     680

     840

    · Analysis

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

     100

     180

    · Design Spec

    · 生成设计文档

     60

     100

    · Design Review

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

     30

     30

    · Coding Standard

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

     30

     30

    · Design

    · 具体设计

     120

     80

    · Coding

    · 具体编码

     200

     300

    · Code Review

    · 代码复审

     40

     40

    · Test

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

     100

     80

    Reporting

    报告

     80

     80

    · Test Report

    · 测试报告

     30

     40

    · Size Measurement

    · 计算工作量

     20

     10

    · Postmortem & Process Improvement Plan

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

     30

     20

    合计

    900

    1080

     

    设计

    思路:通过输入的命令来判断执行各个if函数,将输入的命令分割为两部分,第一部分是指令,第二部分是文件路径,用指令来判断需要执行的if函数,文件路径作为参数。

    字符统计:按行读取文件,把每行的字符数相加

    词数统计:把读取的数据记录下来,把多行拼接为一行,用空格替代标点符号,然后根据空格切割;

    行数统计函数:根据JAVA的readLine功能统计

    设计实现过程

     

     

    用户使用说明

    -c   [文件名]    返回该文件的字符数。

    -w  [文件名]    返回该文件的代码词数。                                                                        

    -l   [文件名]    返回该文件的代码行数。

    代码

    项目目录:

     

     

    主函数:

    package wc;

    import java.io.*;;

    public class wcTest {

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

    // TODO 自动生成的方法存根

    String inputFile = "";// 定义待读取文件目录

    int charNum = 0; // 字符数

    int wordNum = 0; // 单词数

    int lineNum = 0; // 行数

    System.out.println("**** -c   [文件名]  返回文件的字符数");

            System.out.println("**** -w   [文件名]  返回文件词的数目");

            System.out.println("**** -l   [文件名]  返回文件的行数");

    System.out.println("请输入指令:");

    InputStream iStream = System.in;

    InputStreamReader inputStreamReader = new InputStreamReader(iStream);

    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

    String str = bufferedReader.readLine();

    String[] strings = str.split("\s");

    // 获取文件目录名

    for (int i = 0; i < strings.length; i++) {

    if (strings[i].endsWith(".java"))

    inputFile = strings[i];

    }

    // 字符数统计

    for (int i = 0; i < strings.length; i++) {

    if (strings[i].equals("-c")) { // -c对应字符个数统计

    BufferedReader bff = new BufferedReader(new FileReader(inputFile));

    String str1;

    String str2 = bff.readLine();

    while ((str1 = str2) != null) {

    charNum = charNum + str1.length();

    charNum++;

    if ((str2 = bff.readLine()) == null)

    charNum--;

    }

    bff.close();

    String file = inputFile;

    file = file.substring(file.lastIndexOf("\") + 1, file.length());

    System.out.println(file + ",字符个数:" + charNum);

    }

    }

    // 行数统计

    for (int i = 0; i < strings.length; i++) {

    if (strings[i].equals("-l")) { // -l对应字符行数统计

    BufferedReader bff = new BufferedReader(new FileReader(inputFile));

    while (bff.readLine() != null)

    lineNum++;

    bff.close();

    String file = inputFile;

    file = file.substring(file.lastIndexOf("\") + 1, file.length());

    System.out.println(file + ",文件总行数:" + lineNum );

    }

    }

    // 单词数统计

    for (int i = 0; i < strings.length; i++) {

    if (strings[i].equals("-w")) { // -w对应字符个数统计

    BufferedReader bff = new BufferedReader(new FileReader(inputFile));

    StringBuffer sBuffer = new StringBuffer();

    String str1;

    while ((str1 = bff.readLine()) != null)

    sBuffer = sBuffer.append(str1 + " ");

    str1 = sBuffer.toString();

    // 把中英文标点符号都替换为“ ”

    String str2 = str1.replaceAll("[\p{P}+~$`^=|<>~`$^+=|<>¥×]", " ");

    String[] str3 = str2.split("\s+");

    wordNum = str3.length;

    bff.close();

    String file = inputFile;

    file = file.substring(file.lastIndexOf("\") + 1, file.length());

    System.out.println(file + ",单词个数:" + wordNum);

    }

    }

    }

    }

    测试运行

    测试文件

     

    测试结果

     

     

    代码覆盖率

    进行代码覆盖率测试

     

     

    代码覆盖率:98.9%

     

    总结

    通过这次作业,我重新回顾了JAVA的知识,加深了对正则表达式的认知,也学会了代码覆盖率对时间的安排,对功能的评估等知识,同时学会了使用Github

  • 相关阅读:
    笨办法学习python之hashmap
    python实现三级菜单源代码
    ql的python学习之路-day3
    ql的python学习之路-day2
    Spring的数据库开发
    Spring学习之Aspectj开发实现AOP
    spring学习之依赖注入DI与控制反转IOC
    spring学习之第一个spring程序
    spring学习之spring入门
    Java线程(一)——创建线程的两种方法
  • 原文地址:https://www.cnblogs.com/yhp1106/p/9643495.html
Copyright © 2020-2023  润新知