• 作业3个人项目<词频统计>


          上了一天的课,现在终于可以静下来更新我的博客了。

          越来越发现,写博客是一种享受。来看看这次小林老师的“作战任务”。

                                  词频统计

    • 单词:
    • 包含有4个4个以上的字母
    • 单词分隔符分开
    • 如果一个字符串包含_非_字母数字,则不是单词
    • 单词大小写不敏感,例如 “file”、“FILE”和“File”可以看作同一个单词
    • 单词必须是字母开头,“file123”是单词,“123file”不是单词

                    简单理一下思路:

                    1.从控制台输入英语句子(字符串)

                    2.在句子中分割出一个一个单词

                    3.要筛选出4个字母以上的单词

                    4.还要把数字开头的字母筛选出去

                    然后呢?食材都准备好了,就该动刀了:

                      

                         Scanner sc=new Scanner(System.in);
                 //定义es接收英文句子字符串
                 String es=null;
                 System.out.println("请输入英语短句:");
                  //小提示:next遇到空格返回,nextLine可读一行
                     es=sc.nextLine();
                     //为了不区分大小写,把所有字母转换成小写
                     es= es.toLowerCase();
                    //这个类会将字符串分解
                     StringTokenizer token=new StringTokenizer(es);

                                       这里用到了一个类库:import java.util.StringTokenizer;

                                     小林老师那篇引用的博客里说它在字符串中无所不能。这里就用到

                                     一处:分割字符串。来看这行代码:

    String word=token.nextToken(", ?.!:\"\"\''\n"); 

                                        当我从头读取输入的字符串时,遇到上述括弧里的非字母字符时,

                                        产生分割,即产生一个单词。

                                        接下来用到HashMap来统计单词出现的频率

     while(token.hasMoreTokens())
       {   
           //按照,[空格] ? . !,双引号,单引号,换行符去分割 
           String word=token.nextToken(", ?.!:\"\"\''\n"); 
           //取单词的第一个字符,调用函数isNumeric判断word的首字符是否为数字,并且判断单词长度是否大于3
            if( !isNumeric(word.subSequence(0,1))&&word.length()>=4)
              {  
                //统计单词的个数
                   if(map.containsKey(word))
                     {     
                      int count=map.get(word);  
                      //如果HashMap已有这个单词,则使它的数量加1
                       map.put(word, count+1);
                      }  
                 //如果没有第二个相同单词,数量为1 
                 else                                    
                          map.put(word, 1);      
                }
          }  

                                        在遍历过程中, 我同时完成两件事:筛选掉以数字开头的单词,

                                        筛选出长度大于3的单词。

                                        这里提一下自己当时遇到的问题:如何判断单词是不是以数字开头

                                        呢?上网查了一下,一共有三种方法,我当然用了自己觉得比较简

                                        单的方法:正则表达式法。你也可能注意到上面的代码中调用了一个

                                        函数isNumeric(String chr),现在我pou出这个函数

          public static boolean isNumeric(CharSequence charSequence)
          { 
               Pattern pattern = Pattern.compile("[0-9]*"); 
               Matcher isNum = pattern.matcher(charSequence);
               if( !isNum.matches() )
               {
                   return false; 
               } 
               return true; 
           }

                                                             完成以上任务就剩输出了

      List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
      System.out.println("该句子中所有长度大于3的单词出现的次数分别如下:");
      //输出结果
      for (int i = 0; i < infoIds.size(); i++)        
        {     
           Entry<String, Integer> id = infoIds.get(i);  
           System.out.println(id.getKey()+":"+id.getValue());  
        }  

                                                              使用小林老师作业中的实验数据(增加一个以数字

                                                             开头的单词),运行结果如下:

                                                            总结:这次作业学到了不少东西:正则表达式判断数字

                                                         字符,HashMap里的方法又学习一遍,取字符串的首字符。

                                                         记得一个老师说过:java语言跟外语很相似,无非是语法和

                                                         单词,而java的单词就是类库。而这次也感受到java类库的

                                                         强大。

      完整代码清单见:  https://github.com/miaozhongfeng/my-repository/blob/master/zuoye3.java

  • 相关阅读:
    PHP和Redis实现在高并发下的抢购及秒杀功能示例详解
    quartz问题记录-missed their scheduled fire-time
    java(MyEclipse)创建webservice和测试webservice
    Redis wind7 安装
    spring boot新建项目报错总结
    spring boot新建项目启动报:Unregistering JMX-exposed beans on shutdown
    oracle安装过程和创建本地数据库
    正则表达式记录
    java continue与break区别
    Linux查看日志方法总结(1)
  • 原文地址:https://www.cnblogs.com/mzfeng/p/5281347.html
Copyright © 2020-2023  润新知