zoukankan      html  css  js  c++  java
  • 编码作业

    第二部分

    项目地址

    git地址

    表格

    psp2.1 Personal Software Process Stages 预估耗时(min) 实际耗时(min)
    Planning 计划 34 67
    Estimate 估计这个任务需要多少时间 34 54
    Develoment 开发 1000 1140
    Analysis 需求分析(包括学习新技术) 200 240
    Design Spec 生成设计文档 30 40
    Design Review 设计复审 25 20
    Coding Standard 代码规范设计 46 56
    Design 具体设计 60 70
    Coding 具体编码 400 567
    Code Review 代码复审 60 60
    Test 测试(自我测试,代码修改,提交修改) 60 60
    Reporting 报告 30 30
    Test Repor 测试报告 20 15
    Size Measuremen 计算工作量 20 15
    Postmortem&Process Improvement Plan 事后总结,并提出过程改进计划 20 25
    合计 1024 1340

    解题思路描述

    1.文件数处理,将文件数据直接从文件中取出,获得结果后将结果拼接成字符串,利用bufferedwriter写入文件中,读取文件数据使用bufferedreader。
    2.文件中字符串的长度直接使用length()方法获取,在返回字符串长度。
    3.单词数的统计采用正则表达式来分割字符串,再用matches()方法获取匹配的单词,忽略字符数小于4,数字开头等。在利用map<string ,integer>,将单词和对应出现次数加入wordMap中。
    4.统计行数,利用bufferedreader中的readline()方法,整行读取,读取整行数据同时判断是否为空行,为空则忽略改行。直到最后为空,文件完全读取。
    5.对单词出现的频率进行排序。利用map<string,intger>对象,利用sort方法和匿名内部类的比较器进行排序,最后返回一个list对象。
    6.将数据拼接成完整字符串,利用bufferedwriter写入对应的文件中。
    代码规范链接

    设计与实现过程

    1.读取文件数据
    public static String charactersCount(String filePath)
    {

        BufferedReader bReader=null;
        StringBuilder str=null;
    
        try 
        {
            FileReader reader=new FileReader(filePath);
            bReader=new BufferedReader(reader);
            str=new StringBuilder();
            int flag;
            //str.append(bufferedReader.read());
            while ((flag=bReader.read())!=-1)
            {
                str.append((char)flag);
            }
        } catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }finally 
        {
            try 
            {
                bReader.close();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
    
        return str.toString();
    }
    

    2.字符数统计
    //字符数总数统计
    public static int charactersNumberCount(String str)
    {

    	//将字符串改为字符
        char[] ch = str.toCharArray();
        int num = 0;
        for(int i = 0; i < ch.length; i++) {
            if(ch[i] >= 0 && ch[i] <= 127) {
                num++;
            }
        }
        
        return num;
    }
    

    3.行数统计,利用readerline每次读取一行,在判断该行是否为空行
    //计算行数
    public static int linesNumberCount(String filePath)
    {
    File file=new File(filePath);
    int count=0;

    	if(file.exists()) 
    	{
    		try
    		{
    			BufferedReader in = new BufferedReader(new FileReader(file));
    			String line;
    			while((line = in.readLine()) != null)
    			{
    				//忽略空行
    				if(!line.equals("") )
    				{
    					count ++;
    				}
    			}
    			//System.out.print(count);
    			in.close();
    		}
    		catch(FileNotFoundException e)
    		{
    			e.printStackTrace();
    		}
    		catch(IOException e)
    		{
    			e.printStackTrace();
    		}
    		
    	}
    
        return count;
    }
    

    4.按照单词出现频数进行排序
    //按单词频率进行排序
    public List<Map.Entry<String,Integer>> SortMap()
    {

        List<Map.Entry<String,Integer>> wordList=new ArrayList<Map.Entry<String, Integer>>(wordsMap.entrySet());
    
        Collections.sort(wordList, new Comparator<Map.Entry<String, Integer>>() 
        {
        	
        	//利用匿名内部类实现排序
            @Override
            public int compare(Map.Entry<String, Integer> map1, Map.Entry<String, Integer> map2) 
            {
                if (map1.getValue().equals(map2.getValue()))
                {
                    return map1.getKey().compareTo(map2.getKey());
                }
                else 
                {
                    return map2.getValue()-map1.getValue();
                }
            }
        	
        });
    
        return wordList;
    }
    

    性能改进
    在单词排序部分利用匿名内部类的方式利用比较器提高比较速度。
    单元测试
    对字符数,单词数统计和行数统计都进行了测试
    1.字符数统计测试
    public void testCharactersNumberCount() {
    String str="helloworld myname isjohn";
    String strTest="";
    for(int i=0;i<10000;i++)
    strTest+=str;
    System.out.print(Lib.charactersNumberCount(strTest));
    assertEquals(Lib.charactersNumberCount(strTest),240000);
    }
    2.单词数统计测试
    public void testWordsNumberCount() {
    String str="hello world myname isjohn ";
    String strTest="";
    for(int i=0;i<10000;i++)
    strTest+=str;

    	System.out.print("
    "+Lib.wordsNumberCount(strTest));
    	assertEquals(40000,Lib.wordsNumberCount(strTest));
    	
    }
    

    3.行数统计测试
    public void testLinesNumberCount() throws IOException {
    String str="helloworld myname isjohn";
    String strTest="";

    	//地址为本地测试文件地址
    	String outPath="D:\\eclipse\\wordcount_java\\src\\wordcount_java\\test.txt";
    	for(int i=0;i<10000;i++)
    		strTest+=str;
    	
    	FileOutputStream fileOutputStream=new FileOutputStream(outPath);
        OutputStreamWriter outputStreamWriter=new OutputStreamWriter(fileOutputStream,"UTF-8");
        BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);
        bufferedWriter.write(strTest);
    	System.out.print(Lib.linesNumberCount("D:\\eclipse\\wordcount_java\\src\\wordcount_java\\test.txt")+"
    ");
    	assertEquals(19115,Lib.linesNumberCount(outPath));
    	
    }
    

    心路历程

    对于软件的开发有点思路了

  • 相关阅读:
    阿里云CentOS主机修改默认SSH登录的22端口
    python跨文件设置全局变量
    python类装饰器
    执行python manage.py celery beat-l info 时报错 SystemError:<class 'OSError'>可能还会有其他报错
    利用Python脚本实现发送邮件
    python操作pymysql
    python-两个数组元素一样,位置个数不相同,按照一个标准的列表实现另一个列表的排序
    XORM高级操作
    flutter踩坑指南 配置篇
    create-react-app项目暴露webpack配置文件
  • 原文地址:https://www.cnblogs.com/mm220414/p/14612132.html
Copyright © 2011-2022 走看看