zoukankan      html  css  js  c++  java
  • 词频统计设计

     需求概要:
      输入一段英文,根据段落中的英文字符,及常见标点,空格以及换行符对段落进行分割
      统计英文单词在段落中出现的次数并输出单词以及其出现的次数,并对结果进行排序。
     代码分析:
      
      1、输入一段英文;
      2、用StringTokenizer将字符串分解;
    3、将分解的结果进行循环遍历,利用hashmap 不允许重复性,统计单词个数,如果单词重复出现则数量加1,否则map中添加新单词,并且数量设置为1;
    4、调用sort()方法,实现Comparator.compare接口 ,对map进行排序,
      5、循环遍历集合中的键值对,并输出;

    1
    执行代码 2 package zuoye1; 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Comparator; 6 import java.util.HashMap; 7 import java.util.List; 8 import java.util.Map; 9 import java.util.StringTokenizer; 10 import java.util.Map.Entry; 11 //词频统计(统计每个单词出现的次数,输出单词并排序) 12 public class Word { 13    public static void main(String[] args) { 14      String sentence = " While sharing a nickel or a quarter may go a long way for them, it is hard to believe the people would simply lie over and die. But to some people in such an unfortunate situation, it is more than simple surrender but another aspect of personal proportions that have led them to lose hope and live the rest of their days in misery."; //将要输入的句子或段落。 15      int wordCount=0; //每个单词出现的次数。 16      HashMap<String,Integer> map=new HashMap<String,Integer>();//用于统计各个单词的个数,排序 17      StringTokenizer token=new StringTokenizer(sentence);//这个类会将字符串分解成一个个的标记 18       while(token.hasMoreTokens()){ //循环遍历 19         wordCount++; 20         String word=token.nextToken(", ?.!:""'' "); //括号里的字符的含义是说按照,空格 ? . : "" '' 去分割 21         if(map.containsKey(word)){ //HashMap不允许重复的key,所以利用这个特性,去统计单词的个数 22             int count=map.get(word); 23             map.put(word, count+1); //如果HashMap已有这个单词,则设置它的数量加1 24         }else 25         map.put(word, 1); //如果没有这个单词,则新填入,数量为1 26         } 27           System.out.println("总共单词数:"+wordCount); 28           sort(map); //调用排序的方法,排序并输出! 29        } 30     //排序 31     public static void sort(HashMap<String,Integer> map){ 32     //声明集合folder,存放map键值对 33         List<Map.Entry<String, Integer>> folder = new ArrayList<Map.Entry<String, Integer>>(map.entrySet()); 34         Collections.sort(folder, new Comparator<Map.Entry<String, Integer>>() { 35             public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2) { 36             return (obj2.getValue() - obj1.getValue()); 37            } 38         }); 39     //输出 40     for (int i = 0; i < folder.size(); i++) { 41         Entry<String, Integer> en = folder.get(i); 42         System.out.println(en.getKey()+":"+en.getValue()); 43       } 44   } 45 }


    执行结果
     1 总共单词数:64
     2 to:3
     3 a:3
     4 people:2
     5 of:2
     6 and:2
     7 them:2
     8 is:2
     9 it:2
    10 the:2
    11 in:2
    12 but:1
    13 for:1
    14 surrender:1
    15 long:1
    16 unfortunate:1
    17 over:1
    18 more:1
    19 would:1
    20 While:1
    21 But:1
    22 misery:1
    23 live:1
    24 such:1
    25 or:1
    26 that:1
    27 aspect:1
    28 simply:1
    29 than:1
    30 rest:1
    31 some:1
    32 quarter:1
    33 go:1
    34 hope:1
    35 have:1
    36 simple:1
    37 way:1
    38 believe:1
    39 another:1
    40 personal:1
    41 sharing:1
    42 die:1
    43 hard:1
    44 situation:1
    45 may:1
    46 lose:1
    47 proportions:1
    48 days:1
    49 led:1
    50 an:1
    51 nickel:1
    52 their:1
    53 lie:1

    coding.net 地址 :  https://coding.net/u/linliaimeli/p/Word.java/git

  • 相关阅读:
    又爱又恨的eval
    http_build_query 这个方法会把值为NULL的给干掉
    allow_url_fopen设置
    纠结了下 B 和 STRONG标签区别
    Drupal 发邮件模块 drupal smtp 安装与设置
    php array_merge 和 两数组相加区别
    学历严格正相关于素质 Kai
    表语就是主语补语,靠 Kai
    一些真正有思想的up Kai
    光速不变且最大,换个思路想,非常合理,犹如天经地义【转载】 Kai
  • 原文地址:https://www.cnblogs.com/linliaimeili/p/5840011.html
Copyright © 2011-2022 走看看