Wordcount

1.github地址:

 https://github.com/kawoyi/WordCounter

2.PSP表格

 

3.解题思路

刚拿到题目的时候感觉是可以通过文件读写将字符全部读入然后在再根据不同的分隔符去表示单词和换行,但是实际过程中发现题目的需求不明确·需要自己去理解,然后代码实现的时候也遇到了很多困难,例如对文件操作不熟悉,异常的处理等等。

然后只能上网去寻找资料,看了一下CDSN和JAVA的在线文档,了解了这次作业相关类的运用。

4.

程序实现过程:

总共三个JAVA类Counter类(实现具体功能:字符,单词,行数,空行,代码行,注释行的统计,结果的输出等)ReadFile类(实现文件的递归读取·)Test类(主程序入口,判断当有-s参数时多次调用Counter类)

程序流程图

5.代码说明

递归得到文件的路径:public static void test(String fileDir) { 

List<File> fileList = new ArrayList<File>();

File file = new File(fileDir);
File[] files = file.listFiles();// 获取目录下的所有文件或文件夹
if (files == null) {// 如果目录为空,直接退出
return ;
}
// 遍历,目录下的所有文件
for (File f : files) {
if (f.isFile()) {
fileList.add(f);

} else if (f.isDirectory()) {
//System.out.println(f.getAbsolutePath());
test(f.getAbsolutePath());
}
}

for (File f1 : fileList) {
list.add(f1);
//System.out.println(f1.getName());
}

具体统计功能实现:

public void analyse()throws IOException{ //功能实现
String s=null;
InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(isr);
while((s=br.readLine())!=null)//null表示文件读取结束
{
String ss="";//记录单词
if(!s.equals("")){
countline++;//行增加
//System.out.println(s);
}
countchar += s.length();//字符个数就是字符长度
for(int i=0;i<s.length();i++)//判断一行里字符种类
{
char c=s.charAt(i);
if(!isSeperator(c))//不是分隔符
{
String temp=Character.toString(c);
ss=ss.concat(temp);//拼接字符
if(i==s.length()-1)//行末尾没有分隔符
{
if(!stoplistpath.equals(""))//判断停用词表
{
boolean flag=false;
for(int p=0;p<stoplist.length;p++)
{
if(ss.equals(stoplist[p]))
{
flag=true;
break;
}
}
if(flag==false)
{
word.add(ss); //添加单词
}
}
else
{
word.add(ss); //添加单词
//System.out.print("2"+ss);
}
}
}else
{ //注释行判断
if(c=='/')
{
if(i<s.length()-1&&s.charAt(i+1)=='/')
{
if(!expline.contains(countline))
{
expline.add(countline); //添加注释所在行
}
}
}
if(!ss.equals(""))
{
if(!isDigit(ss))
{
//System.out.println("ss:"+ss);
if(!stoplistpath.equals(""))
{
boolean flag=false;
for(int p=0;p<stoplist.length;p++)
{
if(ss.equals(stoplist[p]))
{
flag=true;
break;
}
}
if(flag==false)
{
word.add(ss);
}
}
else
{
word.add(ss);
//System.out.print("2"+ss);
}
if(!linenum.contains(countline))
{
linenum.add(countline);//添加代码所在行
}
countword++;
}
ss="";
}
}
}
}
isr.close();//关闭文件
writer();//输出结果
}
}

6.测试设计过程

 测试设计思路:

主要用了边界值测试的思路,同时也用了单元测试的思路。将功能模块细分,对单个模块进行测试。在用例1~4中就是分别测试了,字符统计模块,单词统计模块,行数统计模块,停用词表模块。边界值测试主要是针对文件行末尾的判断,单词中间有多个间隔符的处理,注释存在代码行的处理等边界条件。

7.参考文献链接

JDK在线文档 http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

CSDN官网 https://www.csdn.net/

 

posted @ 2018-03-21 21:01  薛定谔的昵称  阅读(225)  评论(2)    收藏  举报