• 分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示


    import java.util.HashMap;

    import java.util.Iterator;

    import java.util.Map;

    /**

     * 

     * @author 吴思婷

     * 2016-4-02

     * WordNum类用来计算英语句子中出现的单词频率

     * 假设单词之间用空格隔开,不考虑句子中的" . "和" ' "等符号,以及全角的情况

     */

    public class WordNum {

    private Map<String, Integer> Map;  //用键值对存储单词和它出现的频率

    public WordNum(String Words){

    Map=this.getArray(Words);

    }

    /**

     * 该方法按照空格拆分句子中的单词,放入数组,统计数组中相同单词的个数,并放入键值对数组中

     * @param Words   英语句子

     * @return Map  用于存储单词及其频率的键值对

     */

    public Map<String,Integer> getArray(String Words){

    String[] wordsArray = Words.split("\s");

    Map<String, Integer> Map=new HashMap<String, Integer>();

    int arrLength=wordsArray.length;

    int currentNum=0;

    for(int i=0;i<arrLength;i++){

    if("".equals(wordsArray[i].trim())){

    continue;

    }

    if(!Map.containsKey(wordsArray[i])){

    //首次出现,放入键值对

    Map.put(wordsArray[i],1);

    }else {

    //键值对中已存在的,键值增加1,删除,重新添加此键值对

    currentNum=Map.get(wordsArray[i])+1;

    Map.remove(wordsArray[i]);

    Map.put(wordsArray[i],currentNum);

    }

    }

    return Map;

    }

    /**

     * 输出显示单词及其频率

     */

    public void Result(){

    //keySet()方法生成键视图,还需wordsMap.get()一次,所以效率较低

    //entrySet()方法直接生成键-值对视图,无需在get一次,效率较高

            //Iterator iterator= wordsMap.keySet().iterator(); 

        Iterator iterator=Map.entrySet().iterator();

             while(iterator.hasNext())   { 

                 Map.Entry entry=(Map.Entry)iterator.next();

                 System.out.println("在句子单词"+entry.getKey()+"出现了"+entry.getValue()+"次!");

             } 

    }

    }

    import org.junit.Before;

    import org.junit.Test;

    public class WordNumTest {

    //测试只考虑了句子正常输入时候的情况,尚未考虑当句子首尾有空格、空格不止一个,

    //空格为为Tab键时候的情况,并且符号也被计数

    @Test

    public void testOutputResult(){

    System.out.println("单词出现频率单元测试:");

    String str="NO , Is NO Pain NO Gain";

    WordNum wordFreq=new WordNum(str);

    wordFreq.Result();

    }

    }

  • 相关阅读:
    Linux之SSH详解
    Linux下的静态路由配置
    Linux之防火墙配置
    五、SQL 转换:Oracle 转 MySQL
    四、Oracle转Mysql总结
    三、MySQL 替代 Oracle 序列以及自增长处理
    二、MySQL 高级部分
    一、MySQL 基础
    15-1、常用类
    14-1、GUI
  • 原文地址:https://www.cnblogs.com/thereisa/p/5359600.html
Copyright © 2020-2023  润新知