WordCount

it2024-10-17  19

一、github项目地址:https://github.com/bysking/WordCount

 

二、PSP阶段:

 

三、需求分析:(1)基本功能wc.exe -c file.c //返回文件 file.c 的字符数wc.exe -w file.c //返回文件 file.c 的单词总数wc.exe -l file.c //返回文件 file.c 的总行数wc.exe -o outputFile.txt //将结果输出到指定文件outputFile.txt

(2)wc.exe -s //递归处理目录下符合条件的文件wc.exe -a file.c //返回更复杂的数据(代码行 / 空行 / 注释行)wc.exe -e stopList.txt // 停用词表,统计文件单词总数时,不统计该表中的单词(3)wc.exe -x //该参数单独使用,如果命令行有该参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、单词数、行数等全部统计信息。备注:空格也算字符。由空格或逗号分割开的都视为单词,且不做单词的有效性校验,例如:thi#,that视为用逗号隔开的2个单词。-c, -w, -l参数可以共用同一个输入文件,形如:wc.exe –w –c file.c 。-o 必须与文件名同时使用,且输出文件必须紧跟在-o参数后面,不允许单独使用-o参数。 [file_name]: 文件或目录名,可以处理一般通配符。其中,代码行:本行包括多于一个字符的代码。空 行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:}//注释在这种情况下,这一行属于注释行。-e 必须与停用词文件名同时使用,且停用词文件必须紧跟在-e参数后面,不允许单独使用-e参数。stopList.txt中停用词可以多于1个,单词之间以空格分割,不区分大小写wc.exe -s -a *.c返回当前目录及子目录中所有.c 文件的代码行数、空行数、注释行数。wc.exe -s -a –c -w *.c–e stop.txt –o output.txt返回当前目录及子目录中所有.c 文件的字符数、单词总数、代码行数、空行数、注释行数,并将结果保存在output.txt中,且统计单词时忽略stop.txt中的单词。

 

 四、解题思路:

题目到手,之后就看其需求,为什么要做这个需求?是为了达成怎样的目标?然后对用户初步了解需求,然后用工具软件列出要开发的系统的大功能模块我就把这个程序分为两个块一个是实现基本输入输出功能的,另一个是文件处理递归的,每个大功能模块有哪些小功能模块,比如基本功能里面针对-w -c -l 的不同处理就可以看成是小的功能模块。

 

深入了解和分析需求,根据自己的经验和需求用WORD或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。方便后期的工作有序进行。     五、程序设计实现过程组织。     设计了三个类,         方法如下:    

public void fun(String ff,int c,int w,int l,int a,int ss,int e)//功能选择函数,根据传入的标志变量调用相应的函数

public int zCount()//计算字符

public int ciCount()//计算单词数

public int hCount()//计算行数

public boolean save(String name,int c,int w,int l,int a,int s,int e)//文件输出

public void afun()//注释计数

public int efun()//停用词表

 

六、代码说明(两个函数举例)

//主解析参数解析操作 

/*-------------------------------------------------------------------------------*/    int c=0,w=0,l = 0,o=0,s=0,a=0,e=0; //标志变量     for(int i=0;i<args.length;i++)       {         //解析参数数组args[]

         if(args[i].startsWith("-"))//参数特征判断           {               switch(args[i])               {                   case "-c":                     c=1;                     break;                     //此处省略。。。。                     default:                 }             }

/*----------------------------------------------------------------------------------------*/

 

/*-----------------------------------------------------------------------------------------*/

public void afun() throws IOException { // TODO Auto-generated method stub int daima = 0, zhushi = 0, kong = 0; int isin = 0; File f = new File(fileName); if (!f.exists()) { f.createNewFile(); } // 建立一个输入流对象reader InputStreamReader reader = new InputStreamReader(new FileInputStream(f)); // 建立一个对象,它把文件内容转成计算机能读懂的语言 BufferedReader br = new BufferedReader(reader); String line = "";

while ((line = br.readLine()) != null) { daima++; String pattern = ".*\\s*//.*";

String tou=".*\\/\\*.*"; String wei=".*\\*\\/.*"; boolean isMatch = Pattern.matches(pattern, line); boolean isMatch5 = Pattern.matches(tou, line); boolean isMatch6 = Pattern.matches(wei, line); if (isMatch5){ if(isin==0)zhushi++; isin=1; } if (isMatch6) isin=0; if(isin==1){ zhushi++; } if (isMatch) zhushi++; String pattern2 = "\\s*\\{\\s*";/*单独在一行中出现“{”*/ boolean isMatch2 = Pattern.matches(pattern2, line); String pattern3 = "\\s*\\}\\s*";/*单独在一行中出现“}”*/ boolean isMatch3 = Pattern.matches(pattern3, line); String pattern4 = "\\s*";/*匹配空行*/ boolean isMatch4 = Pattern.matches(pattern4, line); if (isMatch2||isMatch3||isMatch4) kong++;

}br.close(); //System.out.println(outfileName); File writename = new File(outfileName); // 相对路径,如果没有则要建立一个新的output。txt文件 writename.createNewFile(); // 创建新文件 BufferedWriter out = new BufferedWriter(new FileWriter(writename,true)); out.write(this.fileName+",代码行/空行/注释行:"+Integer.toString(daima-kong-zhushi)+"/" +Integer.toString(kong)+"/"+Integer.toString(zhushi)+ "\r\n"); System.out.println(fileName+",代码行/空行/注释行:" + (daima-kong-zhushi) + "/" + kong + "/" + zhushi); out.flush(); // 把缓存区内容压入文件 out.close(); }

/*--------------------------------------------------------------------------------*/

 

 

 

七、测试用例:

提前写好的用于测试的.c文件:

 测试用例如下:

采用表格的方式可能清晰一点.

 

 

(时间紧,草草结束。)

 

bat测试脚本:

 

 

测试结果:

 

 

 

 

参考文献:[1].www.baidu.com

                 [2].http://www.runoob.com/java/java-tutorial.html

 

转载于:https://www.cnblogs.com/bysking/p/8596282.html

相关资源:wordcount.jar
最新回复(0)