作业

书上的一个小作业,要求得到一段代码的单词数,字符数和行数。我用Android写了一个程序。来实现这些功能:
得到代码的字符数:

public int getCharNum(InputStream inputStream1) throws IOException {
        reader = new InputStreamReader(inputStream1);
        bufferedReader = new BufferedReader(reader);
        int i;
        while ((i = bufferedReader.read()) != -1){
            num ++;
        }
        reader.close();
        bufferedReader.close();
        return num;
    }

得到代码的行数:

 public int getLineNum(InputStream inputStream2) throws IOException{
        reader = new InputStreamReader(inputStream2);
        bufferedReader = new BufferedReader(reader);
        String str;
        while (( str = bufferedReader.readLine()) != null){
            num ++;
        }
        reader.close();
        bufferedReader.close();
        return num;
    }

得到代码的单词数:

 public int getWordNum(InputStream inputStream3) throws IOException{
        reader = new InputStreamReader(inputStream3);
        bufferedReader = new BufferedReader(reader);
        String str1;
        while (( str1 = bufferedReader.readLine()) != null){
            //单词数,split()方法,返回是一个数组,根据(空格,标点符号)分割成字符串数组,数组长度就是单词数
            num += str1.split("[  , . ? { } ( )]").length;//使用正则表达式实现多个分隔符进行分隔的效果。
        }
        return num;
    }

通过按钮的事件监听,调用以上方法:

public void onClick(View view) {
        switch (view.getId()){
            case R.id.button_stats:
                IOUtil ioUtil1 = new IOUtil();
                IOUtil ioUtil2 = new IOUtil();
                IOUtil ioUtil3 = new IOUtil();
                InputStream inputStream1 = getResources().openRawResource(R.raw.a);
                InputStream inputStream2 = getResources().openRawResource(R.raw.a);
                InputStream inputStream3 = getResources().openRawResource(R.raw.a);
                try {
                    int chars = ioUtil1.getCharNum(inputStream1);
                    int lines = ioUtil2.getLineNum(inputStream2);
                    int words = ioUtil3.getWordNum(inputStream3);
                    textView_show.setText("文本的字符数为:" +chars+ "\n"+ "文本的行数为:" +lines
                    +"\n"+"文本的单词数:"+words);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
        }
    }

这是我随机截取的一段代码,用来测是我的程序:

public class IOUtil  {
    private int num = 0;
    public int charNum(String fileName){
        try {
            int i;
            FileInputStream fileInputStream = new FileInputStream(fileName);
            while ((i = fileInputStream.read()) != -1){
                num ++;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return num;
    }
}

运行效果:

由于能力有限,目前只是简单的实现了这几个功能。而且这个程序存在bug,比如我用split()方法,通过使用正则表达式实现多个分隔符进行分隔的效果。但在列举进行分割的符号中存在漏洞。希望在以后的学习中可以找的解决的方法。

下面是我写这个程序的耗时记录表,从开始找资料到完成这些功能并检测,总计大概用了8小时。

PSP2.1 Personal SofterWare Process Stages Time(%)
Planning 计划 12.5
·Estimate ·估计这个任务的需要时间 12.5
Development 开发 87.5
·Analysis ·需求分析 6.25
·Design ·具体设计 6.25
·Coding ·具体编码 62.5
·Test ·代码测试 12.5
posted on 2017-03-25 17:01  Zyhzy  阅读(159)  评论(2编辑  收藏  举报