• 软件工程作业-----第二次


    一.需求分析

    1.统计一篇英文文章或者段落里出现的单词数量(词汇量)

    2.统计每个单词出现的次数

    3.对单词出现的次数进行排序输出

    4.按照单词出现的次数进行输出,列出前10个单词的词频

    5.批量文本处理

    6.控制台读入英文单篇作品

    二.功能实现

    功能1  小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键盘在控制台下输入命令。

    功能2  支持命令行输入英文作品的文件名,请老五亲自录入。

    功能3  支持命令行输入存储有英文作品文件的目录名,批量统计。

    功能4  从控制台读入英文单篇作品,或输入一段话。

    文本的输入,路径的变化,灵活的拼接字符串,是获取输入的核心。

         if(args[0].contains(".")) {
                 
              //功能1
              String filename = args[0];
              String filepath =new File("/").getAbsolutePath()+ filename;
              File file = new File(filepath);
                  io(file);
         }else if(args[0].equals("folder")) { 
                 //功能3 
                 File dir = new File("E:/folder");
                 File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
                 if (files != null) {
                     for (int i = 0; i < files.length; i++) {
                        String fileName = files[i].getName();
                            if (files[i].isDirectory()) { // 判断是文件还是文件夹
                                files[i].getAbsolutePath(); // 获取文件绝对路径
                             } else if (fileName.endsWith("txt")) { // 判断文件名是否以.txt结尾
                                 String filepath = files[i].getAbsolutePath();
                                 File file = new File(filepath);
                                 System.out.println(fileName.substring(0,fileName.length()-4));
                                 io(file);
                                 System.out.println("-------------------");
                                
                             } else {
                                 continue;
                             }
                         }
                     }
                 }else if(!args[0].equals("folder") &&!args[0].contains(".")) {      
                     //功能2    
                     String filename = args[0];
                     String filepath =new File("/").getAbsolutePath()+ filename + ".txt";
                     File file = new File(filepath);         
                     io(file);  
                 }
             }     

    文本读取,大小写不区分,只统计单词,剔除除字母以外的字符。

    BufferedReader br = new BufferedReader(new FileReader(file));//新建缓存区读取为所需统计文件的读取     
            StringBuffer mp= new StringBuffer();//更新字符缓存为mp  
            String s;  
            //把要统计的文件装入字符串m  
            while (( s=br.readLine())!= null) { 
                s=s.toLowerCase();//转化成小写
                    mp.append(s);//设置字符缓存的搜索路径是字符串mp  
            }  
            Map<String,Integer>  map = new HashMap<String, Integer>();//运用哈希排序的方法进行排序  
            StringTokenizer st = new StringTokenizer(mp.toString(),", ?.!:""''
    ");//分割字符串  
               
            while (st.hasMoreTokens()) {  
                String letter = st.nextToken();  
                    int count;  
                    if (map.get(letter) == null) {  
                          count = 1;//表明了没有进行分割。  
                    } else {  
                         count = map.get(letter).intValue() + 1;  
                    }  
                    map.put(letter,count);  
                }  

    对单词进行排序以及输出,使用TreeSet进行排序。

         Set<WordEntity> set = new TreeSet<WordEntity>();  
            for (String key : map.keySet()) {  
                set.add(new WordEntity(key,map.get(key)));  
            }  
                 
            System.out.println("total 	"+map.size()+ "	 words");
            System.out.println();  
           
            int count = 1;  
            for (Iterator<WordEntity> it = set.iterator(); it.hasNext(); ) {  
                WordEntity w = it.next();
                { 
                    System.out.println(w.getKey() + "		"  + w.getCount());  
                    if (count == 10)// 当输出10个后跳出循环  
                        break;  
                    count++;  
                }  
            }  

    定义一个单词的实体类WordEntity,包含两个元素,键值和次数,还有一些构造方法。

    class WordEntity implements Comparable<WordEntity> {  
        private String key;  
        private Integer count;  
        public WordEntity (String key, Integer count) {  
            this.key = key;  
            this.count = count;  
        }  
        public int compareTo(WordEntity o) {  
            int cmp = count.intValue() - o.count.intValue();  
            return (cmp == 0 ? key.compareTo(o.key) : -cmp);  
                    
        }  
        public String toString() { 
            return key + " 出现的次数为:" + count;  
        }  
        public String getKey() {  
            return key;  
        }  
        public Integer getCount() {  
            return count;  
        }  
    }  

    三.PSP阶段表格

     

    四.代码

    git地址:https://git.coding.net/lick468/wf.git

  • 相关阅读:
    rs485
    RS-232
    Delphi CRC算法, 不错
    Delphi Modbus RTU CRC16校验码
    如何使用Delphi编写Modbus RTU CRC16的校验码
    Delphi CRC算法crcexecute
    Delphi CRC32Verify控件
    Delphi CRC16校验算法实现(转)
    delphi crc校验函数
    JavaScript如何一次性展示几万条数据
  • 原文地址:https://www.cnblogs.com/lick468/p/7543802.html
Copyright © 2020-2023  润新知