zoukankan      html  css  js  c++  java
  • 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) == '
    ') {
                    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+"
    单词的个数为"+wordNum+"
    行数为"+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很神奇也很好用。但是迫于害怕和没有机会,一直没有实践过,谢谢老师给我的资料和实践的机会。本次博客写的有点匆忙,有不足之处请多多指教。

  • 相关阅读:
    通过注册表读取设置字体
    StretchBlt
    PatBlt
    如何用MaskBlt实现两个位图的合并,从而实现背景透明
    输出旋转字体
    用字体开透明窟窿
    输出空心字体
    光滑字体
    画贝塞尔曲线
    一些点运算函数
  • 原文地址:https://www.cnblogs.com/c-lover/p/9694191.html
Copyright © 2011-2022 走看看