zoukankan      html  css  js  c++  java
  • WordCount 基础功能

    软测第一次作业

    该项目在码云上的地址:

    https://gitee.com/zhege/WordCount

    一,概述

    WordCount的基础功能需求分析大致如下:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中。

    详细可参考网址:

     https://edu.cnblogs.com/campus/xnsy/2018Systemanalysisanddesign/homework/2120

    该项目的psp表格如下:

    二.解题思路

    1.使用idea

    使用IDEA的编译器创建一个单纯的java的项目(IDEA的使用及配置)

    2.利用java读写文件(IO流的使用)

    使用java IO流,来对文件进行操作

    import java.io.File;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;

    3.如何给主方法添加参数,并通过逻辑达到要求

    //主方法
        public static void main(String[] args)
        {
    
            for(int i=0;i<args.length;i++)
            {
                //......
            }
            //......
            return 0;
        }

    4.如何将java程序打包成exe文件

    1)IDEA将java导出可运行的jar包

    参考:https://www.cnblogs.com/blog5277/p/5920560.html

    2)将jar变成exe文件

    参考:https://blog.csdn.net/sunkun2013/article/details/13167099

    三.程序设计实现过程

    这是WordCount的基础功能,代码量较少,只用了一个class.

    下面是属性和方法代码

    属性

        String inputFile;       //用户输入的文件路径
        String outputFile;      //输出信息的文件名
       
     
        int chars;               //字符数
        int words;               //单词数
        int lines;              //行数
      
        boolean needC;      //输入参数中是否有“-c”
        boolean needW;      //输入参数中是否有“-w”
        boolean needL;      //输入参数中是否有“-l”
        boolean needO;      //输入参数中是否有“-o”
    
     

    方法

    public static void getBasicInfo(String fileName)
        {
            //_____________________变量声明____________________
            chars=0;
            words=0;
            lines=0;
            //统计单词用的变量
            boolean partition=true;
            char charNow;
            try 
            { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw  
                File filename = new File(fileName); // 要读取该路径的文件  
                InputStreamReader reader = new InputStreamReader(  
                        new FileInputStream(filename)); // 建立一个输入流对象reader  
                BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言  
                String line ;  
                line = br.readLine(); 
                while (line != null) 
                {  
                    //——————————————————————统计行数和字符数__________
                    chars+=line.length();
                    lines++;
                    
                    //_______________________打印该行行号和内容
    //                System.out.print(lines);
    //                System.out.print("    ");
    //                System.out.print(line);
                    
                    //________________________统计单词_____________________________
                    
                    partition=true;
                    
                    for(int i=0;i<line.length();i++)
                    {
                        charNow=line.charAt(i);
                        if(partition==true&&charNow!=' '&&charNow!='	'&&charNow!=','&&charNow!=',')
                            {
                                words++;
                                partition=false;
                            }
                        if(charNow==' '||charNow=='	'||charNow==','||charNow==',')
                        {
                            partition=true;
                        }
                        
                    }
                    //-----------------------------------------------------------------
                    line = br.readLine(); // 读取下一行数据  
                } 
                chars+=lines-1;    //由于换行符也算做字符,故如此
                br.close();
            }
            
            catch (IOException e) 
            {
                e.printStackTrace();
            }         
        }
    public static void getBasicInfo(String fileName)

     统计指定文件FileName的基本数据:字符数、单词数、行数。

    public static void main(String[] args)
        {
            
            //
            inputFile="";
            for(int i=0;i<args.length;i++)
            {
    
                if ("-c".equals(args[i])) {
                    needC = true;
                } else if ("-w".equals(args[i])) {
                    needW = true;
                } else if ("-l".equals(args[i])) {
                    needL = true;
                } else if ("-o".equals(args[i])) {
                    needO = true;
                    outputFile = args[i + 1];
    
                } else {
                    if (!args[i - 1].equals("-e") && !args[i - 1].equals("-o")) {
    
                        inputFile = args[i];
                    }
                }
    
            }
            //根据参数情况,生成输出结果字符串
            String outputStr="";
            ArrayList<String> fileNames =new ArrayList<String>();//要统计的文件名们
            
            if(!needS)                  
            {
                fileNames.add(inputFile);
            }
            else
            {
                s(fileNames);
            }
            int len=fileNames.size();
            String fn;
            
            for(int i=0;i<len;i++)   
            {
                fn=fileNames.get(i);    //对于每一个要统计的文件
                //System.out.println(fn);
                String fileShortName=fn.substring(fn.lastIndexOf("\")+1, fn.length());
                
                 //基本信息
                if(needC||needW||needL)    
                {
                    //统计基本信息
                    
                    getBasicInfo(fn);
                    
                    //将基本信息写结果字符串
                    
                    if(needC)
                    {
                        //file.c, 字符数: 50
                        outputStr+=fileShortName;
                        outputStr+=", char: ";
                        outputStr+=chars;
                        outputStr+="
    ";
                    }
                    if(needW)
                    {
                        //file1.c, 单词数: 30
                        outputStr+=fileShortName;
                        outputStr+=", word: ";
                        outputStr+=words;
                        outputStr+="
    ";
                    }
                    if(needL)
                    {
                        //file.c, 行数: 10
                        outputStr+=fileShortName;
                        outputStr+=", line: ";
                        outputStr+=lines;
                        outputStr+="
    ";
                    }
                }
            
                
            }
            
            System.out.println(outputStr);
            //写入文件
            if(!needO)
            {
                outputFile="result.txt";
            }
            try 
            {
                
                File writename = new File(outputFile); // 如果没有则要建立一个新的output。txt文件  
                writename.createNewFile(); // 创建新文件  
                BufferedWriter out = new BufferedWriter(new FileWriter(writename));  
                out.write(outputStr); // 
    即为换行  
                out.flush(); // 把缓存区内容压入文件  
                out.close(); // 最后记得关闭文件  
                //System.out.println("already written the output.txt"); 
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
    
            
        }
    public static void main(String[] args)

    通过主方法调用参数,之后,根据参数情况,调用其他方法,将结果写入字符串outputStr;最后将outputStr写入输出文件(根据是否有-o参数,决定是写入默认的restult.txt还是写入用户给定的文件)

     四.测试设计过程

    具体设计的测试用例如下:

    测试用例

    测试结果

     测试评价

    基本功能大体已经实现,测试结果和预想中的一样,效果还不错,比较令人满意。

    五:参考文献连接:

    1. WordCount by Java

     

     

    人生若只如初见,浮沉繁华,慕然回首,不过过眼云烟。 我只在红尘中争渡,即便是一朵浪花,亦奋勇向前。
  • 相关阅读:
    web安全之sql注入实例(5.0之前的)
    http和htpps
    web安全之sql注入原理
    web安全之http协议
    题解洛谷P1538【迎春舞会之数字舞蹈】
    [模板]洛谷T3375 KMP字符串匹配
    [模板]洛谷T2158 仪仗队 欧拉函数
    洛谷T1967 货车运输 Kruskal最大生成树&&倍增LCA
    [模板]洛谷T3380 二逼平衡树 线段树套BST
    [模板]洛谷T3384 树链剖分
  • 原文地址:https://www.cnblogs.com/wuhen8866/p/9688604.html
Copyright © 2011-2022 走看看