java实现WC项目
2021-06-29 14:05
标签:stand 技术分享 print util dea 分享 return github void wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。 基本功能列表 扩展功能列表 高级功能列表 1. -x显示图形界面(未实现) 30 1270 -s功能,实现对目录所有文件的递归: -l 实现行数统计: -c 实现字符数统计: -w 实现单词数统计: -a 统计代码行、空行、注释行: 测试文件: 运行结果: 测试文件: 运行结果: 测试文件: 完成了这个项目,感觉收获还是挺多的。首先是加强了自己对java编程的熟悉度,还有就是正则表达式,以前只是囫囵吞枣得匆匆看了一遍,实战是发现自己完全不会用,于是再去认真学习了一遍。在做这个项目的 过程中也是发现了自己存在的一些问题,首先就是算法不过关,考虑不全面,写的也不够精简,所以常常会抛空指针的错误,不过有错误还是挺好的,解决自己的错误才能更好的进步,在以后的编程中才会更加的小心。还有就是在刚开始时会觉得无从下手,特别是对正则表达式不熟悉,不知道要从哪里入手,因此开始编程浪费了挺多时间的。经过这次给了自己以后的一个小经验:即使问题很难,也要尝试着去动手。不要浪费时间去空想,着手,然后一个个的把这些问题解决掉。 java实现WC项目 标签:stand 技术分享 print util dea 分享 return github void 原文地址:https://www.cnblogs.com/123-lhy/p/9644775.html个人项目:WC
GitHub地址:https://github.com/lllhhhyyy/mygit
PSP
PSP2.1
Personal Software Process Stages
预估耗时(分钟)
实际耗时(分钟)
Planning
计划
30
60
· Estimate
· 估计这个任务需要多少时间
240
300
Development
开发
60
120
· Analysis
· 需求分析 (包括学习新技术)
120
240
· Design Spec
· 生成设计文档
60
120
· Design Review
· 设计复审 (和同事审核设计文档)
60
· Coding Standard
· 代码规范 (为目前的开发制定合适的规范)
0
0
· Design
· 具体设计
60
100
· Coding
· 具体编码
60
100
· Code Review
· 代码复审
20
20
· Test
· 测试(自我测试,修改代码,提交修改)
60
120
Reporting
报告
30
30
· Test Report
· 测试报告
30
30
· Size Measurement
· 计算工作量
20
30
· Postmortem & Process Improvement Plan
· 事后总结, 并提出过程改进计划
30
合计
880
关键代码
1 package wc_lhy;
2 import java.io.File;
3 import java.io.IOException;
4 import java.util.HashMap;
5 import java.util.Scanner;
6 import java.util.regex.Matcher;
7 import java.util.regex.Pattern;
8
9
10 public class Deal {
11
12
13 public static void main(String []args) throws IOException{
14
15 HashMap
1 /*对文件夹进行的操作*/
2 public void handleFoler(String folderPath){
3 this.path = folderPath;
4 File file = new File(path);
5 //System.out.println("路径为"+file.getAbsolutePath());
6 File[] listFile = file.listFiles();
7 if(listFile==null){
8 return;
9 }
10 for(int i = 0; i){
11 //非文件夹,即可进行对文件进行处理
12 if(!listFile[i].isDirectory()){
13 System.out.println("文件路径:"+listFile[i].getAbsolutePath());
14 System.out.println("文件名:"+listFile[i].getName());
15 try{
16 judgeCount(listFile[i].getAbsolutePath());
17 } catch (IOException e) {
18 // TODO Auto-generated catch block
19 e.printStackTrace();
20 }
21 }
22 else{
23 //为文件目录,递归处理
24 System.out.println("文件目录路径"+file.getAbsolutePath());
25 handleFoler(listFile[i].getAbsolutePath());
26 }
27
28 }
29 }
1 public void countLine(String path) throws IOException {
2 InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path));
3 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
4 while (bufferedReader.read()!=-1) {
5 String string = bufferedReader.readLine();
6 countLine++;//行数
7 }
8 bufferedReader.close();
9 System.out.println("行数: "+getCountLine());
10 }
1 public void countChar(String path) throws IOException {
2 InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path));
3 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
4 while (bufferedReader.read()!=-1) {
5 String string = bufferedReader.readLine();
6 if(string != null){
7 countChar = countChar + string.length();//字符个数
8 }
9 }
10 bufferedReader.close();
11 System.out.println("字符数: "+getCountChar());
12 }
1 public void countWords(String path) throws IOException {
2 InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path));
3 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
4 while (bufferedReader.read()!=-1) {
5 String string = bufferedReader.readLine();
6
7 if(string != null){
8 countWords = countWords + string.split("\\s").length;//词的个数
9 }
10
11 }
12 bufferedReader.close();
13 System.out.println("单词数:" + getCountWords());
14 }
1 //计算代码行,注释行。空白行
2 @SuppressWarnings("resource")
3 public void countComplex(String filePath) throws IOException {
4 InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(filePath));
5 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
6 //注释行匹配
7 Pattern commetPattern = Pattern.compile("(^//.*$)|(^/\\*.*\\*/$)|(^/\\*\\*.*$)|(^\\*.*$)|.*\\*/$",
8 Pattern.MULTILINE + Pattern.DOTALL);
9 //空白行匹配
10 Pattern nullPattern = Pattern.compile("^\\s*$");
11 //代码行匹配
12 Pattern codePattern = Pattern.compile("\\s*",
13 Pattern.MULTILINE + Pattern.DOTALL);
14 //System.out.println(9);
15 String row;
16 while ((row = bufferedReader.readLine())!= null) {
17 if(nullPattern.matcher(row).find()){
18 countNull++;
19 }
20 //注释
21 if ((row!=null)&&commetPattern.matcher(row).matches()) {
22 commetLine++;
23 }
24 //代码行
25 if((row!=null)&&codePattern.matcher(row).find()) {
26 //else {
27 codeLine++;
28 }
29 }
30 codeLine = codeLine - commetLine-countNull;
31 }
代码测试:
项目总结: