1,github地址

https://github.com/dtneverdie/word-count

2,PSP表格

3,解题思路

先从理论上判断应该先将文件内的字符全部读入,然后根据分隔符来进行单词和换行判断。实际操作的时候遇到了很多问题,根据网上查找到的思路编写后又出现exe4j转换以后原本在eclipse上可以正确运行的文件在命令行运行exe就失败了的情况,最终只能参考了同学的实际代码。

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,测试设计过程

7.参考文献

http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

https://www.csdn.net/

最新文章

  1. mysql主从
  2. android解析图片资源缩小放大问题
  3. sitemesh学习笔记(1)
  4. 【转】itunes connect 如何修改主要语言
  5. Linux中如何使用gThumb批量调整图片大小
  6. linux下安装jira详细步骤
  7. 使用VisualStudio进行单元测试之二
  8. 3.1,pandas【基本功能】
  9. 使用 Gitbook 打造你的电子书
  10. Python入门 - 生成随机数
  11. vs2008中xlslib与libxls库的编译及使用
  12. python与 Ajax跨域请求
  13. day14 闭包
  14. Java知多少(51)finally
  15. Unity3d Transform.forward和Vector3.forward的区别!
  16. 数链剖分(Tree)
  17. Delphi XE5 android 获取网络状态《转》
  18. [LeetCode&amp;Python] Problem 897. Increasing Order Search Tree
  19. PHP 运行相关概念
  20. 公司培训lesson 1-代码质量

热门文章

  1. 求出100以内的素数(java实现)
  2. .net问号的作用
  3. maven编译开源项目报enforce错解决
  4. Mysql语句删除主键的自增
  5. vue启动时候报错
  6. 破解idea地址
  7. 【alpha阶段】第十次Scrum Meeting
  8. Net包管理NuGet(3)搭建私服及引用私服的包
  9. (三)jdk8学习心得之方法引用
  10. 用WPS查看两篇word文档异同之处