GitHub地址https://github.com/carlylewen/ruangong

相关要求

  • 基本功能

    • wc.exe -c file.c     //返回文件 file.c 的字符数(实现)
    • wc.exe -w file.c    //返回文件 file.c 的词的数目 (实现)
    • wc.exe -l file.c      //返回文件 file.c 的行数(实现)
  • 扩展功能

    • -s   递归处理目录下符合条件的文件。(未实现)
    • -a   返回更复杂的数据(代码行 / 空行 / 注释行)。(实现)
  • 高级功能

    • 基本的Windows GUI 程序操作(未实现)
    • 支持通过图形界面选取文件(实现)
    • 支持通过图形界面展现文件的信息(未实现)

PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

   

· Estimate

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

60  85

Development

开发

   

· Analysis

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

 180  210

· Design Spec

· 生成设计文档

 120  80

· Design Review

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

 60 40

· Coding Standard

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

 60  30

· Design

· 具体设计

 180  160

· Coding

· 具体编码

 360  350

· Code Review

· 代码复审

 60  30

· Test

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

 120  60

Reporting

报告

 60  30

· Test Report

· 测试报告

 60  60

· Size Measurement

· 计算工作量

 60  30

· Postmortem & Process Improvement Plan

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

 20  15

合计

   1340  1095

设计说明

主函数: 通过键盘输入获取命令,将命令分割为命令参数和文件名,调用统计函数功能。

统计函数:读取文件,通过readline()读取每一行的内容,根据readline的功能记录行数; 根据所读每一行的长度计算字符数;再将所读的数据根据空格切割拼接计算;空行、 注释行、代码行则用正则判断计算。

使用说明

需求举例:

-c    [file.txt]   返回文件 file.txt 的字符数

-w   [file.txt]   返回文件 file.txt 的单词数

-l     [file.txt]   返回文件 file.txt 的行数

-a    [file.txt]   返回文件 file.txt 的空行、注释行、代码行数

-x    打开图形界面选择文件,返回文件 file.txt 的单词数,行数,字符数空行、注释行、代码行数

代码

项目目录:

主函数:

 public static void main(String[] args) {
// TODO Auto-generated method stub
command = " ";// 存储用户命令
while (true) {
int flag1 = 0;
System.out.println("請输入指令及路径:");
Scanner s = new Scanner(System.in);// 从键盘输入
command = s.nextLine();// 获取输入命令
// 图形化
if (command.equals("-x")) {
tuxing();
continue;
}
String[] split = command.split(" ");// 分割命令
int messlength = split.length;
sparameter = new String[messlength - 1];
// 获取命令参数
for (int i = 0; i < messlength - 1; i++) {
sparameter[i] = split[i]; }
// 获取文件名
filename = split[messlength - 1]; extend();// 统计功能
output();// 输出 } }

统计函数:(基本功能与空行、注释行、代码行计算)

 private static void extend() {
cchar = 0;
cword = 0;
cline = 0;
spaceline = 0;
codeline = 0;
noteline = 0;
boolean q=false;
File file = new File(filename);
if (file.exists()) {
try {
FileInputStream filein = new FileInputStream(file);// 输入流读取文件 BufferedReader bread = new BufferedReader(new InputStreamReader(filein));
String line = "";
StringBuffer buffer = new StringBuffer();
while ((line = bread.readLine()) != null) {
cline++;
buffer.append(line);
cchar += line.length();
line=line.trim(); // 空行,注释行,代码行
String begin="\\s*/\\*.*";
String end =".*\\*/\\s*";
String x= "//.*";
String space="\\s*";
if(line.matches(begin)&&line.matches(end)) {
++noteline;
}
if(line.matches(begin)) {
++noteline;
q=true;
}
else if(line.matches(end)) {
++noteline;
q=false;
}
else if(line.matches(space)) {
++spaceline;
}
else if(line.matches(x)) {
++noteline;
}
else if(q) {
++noteline;
}
else {
++codeline;
} }
cword = buffer.toString().split("\\s+").length;
bread.close(); filein.close(); } catch (FileNotFoundException e) {
// TODO: handle exception
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } else {
System.out.println("failed!!");
}
}

图形界面函数:

 private static void tuxing() {
// TODO Auto-generated method stub
flag = 1;
chooser = new JFileChooser();
int value = chooser.showOpenDialog(null);
if (value == JFileChooser.APPROVE_OPTION) {
File ff = chooser.getSelectedFile();
filename = ff.getAbsolutePath();
extend();
output();
}
}

 测试:

基本功能:
 
测试文件:

 测试结果:

扩展功能:
 
测试文件:

测试结果:

高级功能:

测试文件:

测试结果:

代码覆盖率

进行代码覆盖率测试

代码覆盖率:95.2%

总结:

从一开始计划的时候,先确定了基本功能的实现用什么方法,也重新看了java的文件流和I/O流等,然后再学习正则表达式,如何去判断空行,代码行和注释行,这次项目让我重新复习了许多知识点,也学会更加规范和简洁的编写代码。在这次作业中,我采用了java语言来实现,在完成代码后,也学习了如何比较规范的多方面测试代码以及测试代码覆盖率。

不足:在这次实践中,没有完成递归功能,由于在实现过程中一直出现文件未授权访问的情况,在多方求解后依然无法解决,因此放弃了递归的功能。

总的来说,这一次实践让我认识了,编程不仅仅是编写代码,它包括从一开始的设计构思,到编写实现功能,以及最后的运行测试优化,也希望能从以后学习到更多知识和技能。

实现wc部分功能 java的更多相关文章

  1. 通过python实现wc基本功能

    ---恢复内容开始--- 1.Github项目地址: https://github.com/zhg1998/ww/blob/master/wc.py 2.项目相关要求: 写一个命令行程序,模仿已有wc ...

  2. 小白のjava实现wc.exe功能

    GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c     //返回文件 file.c 的字符数 wc.exe -w file.c    //返回文件 file. ...

  3. JAVA实现WC.exe功能

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

  4. Java实现WC基本功能

    GitHub仓库:https://github.com/douyazai/WCbase 一.WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命 ...

  5. Java实现wc部分功能

    GitHub仓库:https://github.com/TaoTaoLv1/WcProject 一.开发前PSP表格预估* PSP2.1 Personal Software Process Stage ...

  6. 用c语言基本实现wc.exe功能

    网址:https://github.com/3216005214/wc.exe wc项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿 ...

  7. 个人项目:实现wc.exe(Java)

    本项目Github地址:https://github.com/NNewBoy/wc 项目相关要求 基本功能:(已实现) -c 统计文件字符数 -w 统计文件词的数目 -l 统计文件行数 扩展功能:(已 ...

  8. WC 代码统计 java

    GitHub地址 项目需求 实现一个wc统计程序,可以对文本进行相关功能的统计与分析 基本功能 -c 统计字符数 -w 统计文件词数 -l 统计行数 扩展功能 -s 递归搜索目录下面的文件 -a 返回 ...

  9. springmvc+mybatis用多选框批量删除的功能Java代码

    今天写了一个批量删除的功能,在后台传值过程中一直出错,最终还是请教了北京的一位高手帮我解决的,在此首先要好好感谢他,以后我有幸能帮助别人的话,决不推辞. 废话不说,直接进入正题,我会将在编写过程中出现 ...

随机推荐

  1. mysql 开发进阶篇系列 12 锁问题(隔离级别下锁的差异)

    1. innodb在不同隔离级别下的一致性读及锁的差异 不同的隔离级别下,innodb处理sql 时采用的一致性读策略和需要的锁是不同的,同时,数据恢复和复制机制的特点,也对一些sql的一致性读策略和 ...

  2. 【原创】Python第二章——字符串

    字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而 ...

  3. Disruptor 为什么这么快?

    为什么Disruptor不使用队列来实现RingBuffer   队列有两个指针,一个指向队头,一个指向队尾.如果有超过一个生产者想要往队列里放东西,尾指针就将成为一个冲突点,因为有多个线程要更新它. ...

  4. python bytes和bytearray、编码和解码

    str.bytes和bytearray简介 str是字符数据,bytes和bytearray是字节数据.它们都是序列,可以进行迭代遍历.str和bytes是不可变序列,bytearray是可变序列,可 ...

  5. Python系列:一、Python概述与环境安装--技术流ken

    Python简介 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项 ...

  6. 南大算法设计与分析课程复习笔记(1) L1 - Model of computation

    一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种“抽象的机器”之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合 ...

  7. nginx静态资源文件无法访问,403 forbidden错误

    在安装 nginx 服务器后,我想把网站的根目录设置为 /root/www/ ,于是对 nginx 的 nginx.conf 文件进行配置 先打开 nginx.conf #user nobody; w ...

  8. Android Studio 活动的生命周期

    Activity 类中定义了7个回调方法,覆盖了活动的活动周期的每一环节 onCreate()  活动第一次创建的时候调用 onStart() 这个活动由不可见变为可见的时候调用 onResume() ...

  9. [android] 请求码和结果码的作用

    当一个界面中要要开启多个带有返回值的activity时,这个时候,就需要用到请求码和结果码了 调用startActivityForResult(intent,requestCode)方法,开启acti ...

  10. 谈谈MySQL优化原理

    说起MySQL的查询优化,相信大家收藏了一堆奇淫技巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原 ...