Word Count

 

 

【项目概述】

   worldCount是一个统计文件字符数的经典程序,这个项目就是用java语言来实现worldCount的功能,该程序可以通过图形界面选择文件,并对文件的字符数,单词数,行数以及注释等进行统计。

【实现思路】

      该程序的主要思路就是先通过窗口选择一个文件,将该文件传递给相关处理方法,用字符缓存流来读取文件,然后readline()方法逐行读取文件,再将每一行的内容赋予一个字符数组,遍历该数组,通过一定的判断语句来统计其中的字符,单词以及注释的数量,最后输出到窗口

 

【主要代码】

1、读取文件

//通过JFileChooser控件选择文件
JFileChooser jfc = new JFileChooser();
/*
...
*/ //创建一个File类对象 File file
= jfc.getSelectedFile(); //读取文件 FileReader in = new FileReader(file); BufferedReader buffer = new BufferedReader(in);

2、统计数量

/*
         * 注释行标记,用以标注该行是否为注释行(用以标注"/* * /"注释)
         */
        boolean blNote1 = false;
        while ((temp = buffer.readLine()) != null
                || (temp = buffer.readLine()) == "\n") {
            char ch[] = temp.toCharArray();
            int chLength = temp.length();

            /*
             * 空行标记,用以标注该行是否为注释行(用以标注/*注释)
             */
            boolean blNullLine = true;
            /*
             * 注释行标记,用以标注该行是否为注释行(用以标注"//"注释)
             */
            boolean blNote = false;

            /*
             * 遍历该行的字符元素
             */
            for (int j = 0; j < chLength; j++) {

                /*
                 * 遍历该行时,除了末尾换行符,字符数均加一
                 */
                if (ch[j] != '\n') {
                    charNum++;
                }
                /*
                 * 统计空格数
                 */
                if (ch[j] == ' ') {
                    spaceNum++;
                }
                /*
                 * 统计单词数(每一个非英文字母字符之前的字符视为一个单词,每一行末如果为字母视为有一个单词),并标记该行为非空行
                 */
                if (j > 0) {
                    if ((Character.isLetter(ch[j - 1]) && !Character
                            .isLetter(ch[j]))
                            || ((j == (chLength - 1) && Character
                                    .isLetter(ch[j]))))
                        wordNum++;
                    blNullLine = false;
                }
                /*
                 * 统计注释行数
                 */
                if (j < chLength - 1) {
                    
                    //当两个连续的字符为“//”时,标注该行为注释行(因为“//”为单行注释,所以在每行遍历开始时置blNote为false)
                    if (ch[j] == '/' && ch[j + 1] == '/') {
                        
                        blNote = true;
                        continue;
                    }
                    //当两个连续的字符为“ /* ” 时,则视为一个注释的开始,从该行起标注blNote1为true,即为注释行,直至出现"*/"的行为止
                    if (ch[j] == '/' && ch[j + 1] == '*') {
                        
                        blNote1 = true;
                        continue;
                    }
                    if (ch[j] == '*' && ch[j + 1] == '/') {
                    
                        noteNum++;
                        blNote1 = false;
                    }
                }

            }

            if (blNullLine) {
                nullLineNum++;
            }
            if (blNote || blNote1) {
                noteNum++;
            }
            lineNum++;
        }

【软件截图】

选择文件:

 

显示统计数据:

gtihub地址::https://github.com/1850252892/WC.git

 

posted @ 2017-09-27 00:29  周李科的博客  阅读(454)  评论(0编辑  收藏  举报