WordCount

李成洪的github

一..需求说明

1.基本需求

   输入:txt文件

   输出:将txt文件中的字符数、单词数、行数,统计结果以指定格式输出到默认文件

2.输入输出以及计算规定

      wc.exe -c file.c         返回文件 file.c 的字符数wc.exe -w file.c

      wc.exe -w file.c        返回文件 file.c 的单词总数

      wc.exe -l file.c         返回文件 file.c 的总行数

      wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

     空格,水平制表符,换行符,均算字符。

     由空格或逗号分割开的都视为单词,且不做单词的有效性校验,例如:thi#,that视为用逗号隔开的2个单词。

     -c, -w, -l参数可以共用同一个输入文件,形如:wc.exe –w –c file.c 。

     -o 必须与文件名同时使用,且输出文件必须紧跟在-o参数后面,不允许单独使用-o参数。 

3.PSP

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

400

 

· Estimate

· 估计这个任务需要多少时间

350

 

Development

开发

50

 60

· Analysis

· 需求分析 (包括学习新技术)

40

90

· Design Spec

· 生成设计文档

 30

 60

· Design Review

· 设计复审 (和同事审核设计文档)

 30

 30

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 20

 30

· Design

· 具体设计

 30

40

· Coding

· 具体编码

 60

120

· Code Review

· 代码复审

 30

 20

· Test

· 测试(自我测试,修改代码,提交修改)

 40

60

Reporting

报告

 20

80

· Test Report

· 测试报告

 20

 0

· Size Measurement

· 计算工作量

 370

 

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 30

 

 

合计

 400

 590

4.思路

  通过java的输入输出流读写文件,遍历文件中的每一个字符判断其中的空格数,换行健,逗号,分好的数目来统计。

5.类

  1.Util 工具包类提供文件的读写

   2.WordCount类 判断文件中的字符数,行数,单词数

   3.CountPrintl类 将结果打印到指定的文件中

   4.Test类 单元测试类

   5.Client 客户端 

5.关键代码

  

package Util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
public class WDUtil {
    //工具类      负责读写工具
    
    /*读取文件
     * FilePath 文件的路径
     * 返回 StringBuffer
     */
    public String fielRead(String FilePath) 
    {
        File file=new File(FilePath);
        StringBuffer sb=new StringBuffer();
        try {
            FileInputStream fis=new FileInputStream(file);
            InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
            
            while(reader.ready())
            {
                sb.append((char)reader.read());
            }
            reader.close();
            fis.close();
        } catch (Exception  e) {
            
            e.printStackTrace();
        }
        return sb.toString();
    }
    
    /*
     * FilePath 保存文件的路径
     * txt 保存的内容
     */
    public void fileWrite(String FilePath,String txt)
    {
        File file=new File(FilePath);
        try {
            FileOutputStream fop=new FileOutputStream(file);
            OutputStreamWriter writer =new OutputStreamWriter(fop, "utf-8");
            writer.write(txt);
            writer.close();
            fop.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

}

 

package CountWord;

import Util.WDUtil;

public class CountWord {

    WDUtil util = new WDUtil();// 读写文件的工具对象

    /*
     * path 文件的路径 返回文件的总字数
     */
    public int countChar(String path) {
        int charNum = 0;

        String words = util.fielRead(path);
        charNum = words.length();
        return charNum;
    }

    /*
     * path 文件的位置 返回文件中空格的数目
     */

    public int countWord(String path) {
        int wordNum = 0;
        String words = util.fielRead(path);
        for (int i = 0; i < words.length() - 1; i++)// 最后一个字母特殊考虑
        {
            if (words.charAt(i) == ' ' || words.charAt(i) == ';' || words.charAt(i) == ',' || words.charAt(i) == '.')// 出现空格逗号句号分号都算一个单词
            {
                wordNum++;
            }
        }
        wordNum++;// 最后一个不管是什么字母结尾,单词数都加1

        return wordNum;
    }

    public int countEnter(String path) {
        int wordNum = 0;
        String words = util.fielRead(path);
        for (int i = 0; i < words.length(); i++) {
            if (words.charAt(i) == '\n') {
                wordNum++;
            }
        }
        return wordNum + 1;
    }
}
package CountWord;

import java.util.Scanner;

import Util.WDUtil;

/*
 * 根据输入的命令获取操作,和文件路径最后计算结果保存到路径中
 */
public class PrintfCount {

    CountWord cWord=new CountWord();
    WDUtil wdUtil=new WDUtil();
    int charNum=0;//字符的数目
    int wordNum=0;//单词的
    int enterNum=0;//行数

    
    
    public void Print(String[] args)
    {
       String txt=null;
       String path=args[args.length-1];
       for(int i=0;i<args.length;i++)
       {
           String operation=args[i];
           switch(operation)
           {
                   case "-c":
                   //计算字符数
                   {
                       charNum=cWord.countChar(path);
                       System.out.println("字符数为:"+charNum);
                       break;
                   }
       
       
                   case "-w":
                       //计算单词数
                   {
                       wordNum=cWord.countWord(path);
                       System.out.println("单词数为:"+wordNum);
                       break;
                   }
               
                   case "-l":
                       //计算行数
                   {
                       enterNum=cWord.countEnter(path);
                       System.out.println("行数为:"+enterNum);
                       break;
                   }
               
                   case "-o":
                   {
                       String result=wdUtil.fielRead("result.txt");
                       wdUtil.fileWrite(args[i+1],result);
                       break;
                   }
                   
               }
               
       }
       txt="字符的个数为"+charNum+"\n单词的个数为"+wordNum+"\n行数为"+enterNum;
       wdUtil.fileWrite("result.txt", txt);
       
    }
    

}

 

测试总结:1.我不知道table在计算的时候是算一个字符还是多少个,我电脑上算的3个

                  2.在计算单词时我觉得以分号,逗号,句号,空格结尾都应该算一个单词

                  3.在文章结尾应当默认增加一个单词

7.相关链接

   有关博客的使用和排版,:http://www.cnblogs.com/math/p/se-tools-001.html。 

    有关Git的使用,廖雪峰的官方网站。      

8.最后

   非常感谢老师给我们的引导,我一直知道git很神奇也很好用。但是迫于害怕和没有机会,一直没有实践过,谢谢老师给我的资料和实践的机会。本次博客写的有点匆忙,有不足之处请多多指教。

 

posted @ 2018-09-23 23:28  李成洪  阅读(205)  评论(0编辑  收藏  举报