今日看到一个题目,要求在给出的一段话中检索出出现频率最高的单词。现在此分享。


题目:

在下面这段话中,检索出出现次数最多的英文单词:
Look to the skies above London and you’ll see the usual suspects rainclouds, plane and pigeons. But by the end of the year, you might just see something else.


思路:

可以看到,这一段话中包含英文单词、空格、标点符号三种字符,若需要统计单词数,需要将标点符号、空格省略掉

做法:
1、在整个字符串中,先将标点符号替换成空格
2、将字符串按空格(一个或多个)分割
3、统计每个单词出现的次数


实现方法一:

package count;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Count {public static void main(String[] args) {long start = System.currentTimeMillis();String str = "Look to the skies above London and you'll see the usual suspects rainclouds, plane and pigeons. But by the end of the year, you might just see something else.";str = str.replace('\'', ' ');//将'号用空格替换str = str.replace(',', ' ');//将逗号用空格替换str = str.replace('.', ' ');//将句号用空格替换String[] strings = str.split("\\s+");   // “\\s+”代表一个或多个空格,是正则表达式
//      String[] strings = str.split(" +"); // “ +”在我的机器上也能代表一个或多个空格Map<String, Integer> map = new HashMap<String, Integer>();List<String> list = new ArrayList<String>();//存储每个不重复的单词for(String s : strings){if(map.containsKey(s)){//如果map中已经包含该单词,则将其个数+1int x = map.get(s);x++;map.put(s, x);}else{  //如果map中没用包含该单词,代表该单词第一次出现,则将其放入map并将个数设置为1map.put(s, 1);list.add(s);//将其添加到list中,代表它是一个新出现的单词}}int max=0;//记录出现次数最多的那个单词的出现次数String maxString = null;//记录出现次数最多的那个单词的值/** 从list中取出每个单词,在map中查找其出现次数* 并没有真正排序,而只是记录下出现次数最多的那个单词*/for(String s : list){int x = map.get(s);if(x>max){maxString = s;max = x;}}System.out.println(maxString);long end = System.currentTimeMillis();System.out.println("共耗时:" + (end - start) + "毫秒");}
}

实现方法二:

将map中的元素转换成用“键值对”表示的Entry,然后用一个列表(List)存储所有的Entry。
再使用Collections.sort()方法对List进行排序,并自己实现Comparator接口的方法。

package count;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;public class Count2 {public static void main(String[] args) {long start = System.currentTimeMillis();String str = "Look to the skies above London and you'll see the usual suspects rainclouds, plane and pigeons. But by the end of the year, you might just see something else.";str = str.replace('\'', ' ');str = str.replace(',', ' ');str = str.replace('.', ' ');String[] strings = str.split("\\s+");// “\\s+”代表一个或多个空格,是正则表达式/** 跟方法一一样 ,先存储每个单词及其个数* */Map<String, Integer> map = new HashMap<String, Integer>();for(String s : strings){if(map.containsKey(s)){int x = map.get(s);x++;map.put(s, x);}else{map.put(s, 1);}}/** 构造一个包含“键值对”的List* */List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());/** 对List进行排序* 自己实现一个Comparator的匿名内部类,并实现compare方法* 使其根据出现的次数降序排列(因为我们需要的是出现最多的单词)* */Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {//降序排列return o2.getValue() - o1.getValue();}});/** 输出出现次数最多的单词* */System.out.println(list.get(0).getKey());long end = System.currentTimeMillis();System.out.println("共耗时:" + (end - start) + "毫秒");}
}

Java——检索一段话中出现次数最多的英文单词相关推荐

  1. Java实现找出数组中重复次数最多的元素以及个数

    /**数组中元素重复最多的数* @param array* @author shaobn* @param array*/public static void getMethod_4(int[] arr ...

  2. python 在某段文章中确定一段话中每个词出现的次数,并排序

    #-*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding("gbk") import numpy as ...

  3. 一段话中手机号中间四位做特殊处理

    最近接到了编辑这样的需求--『手机号做特殊处理,中间四位替换为*』并且给出了常见的联系方式: Ø  正常联系方式 l   网上颇有知名度的当地导游王家乐(15274422092 ),QQ:(14536 ...

  4. java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...

    方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多 ...

  5. python判断一个或者多个字符串,是否出现在一段话中

    python判断一个或者多个字符串,是否出现在一段话中 要判断一段话中是否有几个字符串,只要一个出现就为True,刚开始想用map函数,后来发现也挺麻烦. 查了一些资料,发现用 any比较好 比如 p ...

  6. Java求字符串中出现次数最多的字符

    Java求字符串中出现次数最多的字符  [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611      Java ...

  7. java统计每个单词单词出现的次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...

    本文实例讲述了Java统计英文句子中出现次数最多的单词并计算出现次数的方法.分享给大家供大家参考,具体如下: import java.util.*; /** * 统计出现次数最多的单词和它出现的次数 ...

  8. 重复最多字符次数java_利用Java实现求字符串中出现次数最多的字符及次数

    利用Java实现求字符串中出现次数最多的字符及次数 发布时间:2020-11-12 16:57:24 来源:亿速云 阅读:108 作者:Leah 这篇文章将为大家详细讲解有关利用Java实现求字符串中 ...

  9. java 单词出现次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...

    搜索热词 本文实例讲述了Java统计英文句子中出现次数最多的单词并计算出现次数的方法.分享给大家供大家参考,具体如下: import java.util.*; /** * 统计出现次数最多的单词和它出 ...

最新文章

  1. kubernetes 中 label的作用_Kubernetes生产环境的16条建议
  2. python获取mysql数据为excel中的sheet_python 从excel、csv、mysql、txt获取数据源
  3. GAN全套学习笔记/论文
  4. CSocket,CAsyncSocket多线程退出时的一些注意事项(解决关闭WinSoket崩溃的问题)
  5. 你真的理解 Integer 的缓存问题吗?| CSDN 博文精选
  6. JavaSE: SuppressWarnings[转]
  7. 布线规划要点-开始设计前必须考虑的几个问题
  8. 一次多线程臭虫经验——异步日志c++化时
  9. freemarker mysql 生成bean_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.6.6版)...
  10. python初识(2)
  11. 学习JSON的神级网站www.bejson.com
  12. 起底量化交易的发展之路
  13. 一个应用范德蒙行列式的例子
  14. 朴素贝叶斯分类器常用的三种条件概率模型:伯努利、多项式、高斯模型
  15. ***WIN2003 PHP服务器的另类技术
  16. 第二周教学课件及实验任务已发布!
  17. Linux操作系统之安装Linux虚拟机
  18. UVa1395(最小值最小生成树+并查集)
  19. 公开在线讲座|Tamer Özsu教授:图处理-全景式视角和开放性问题
  20. Wifi密码 (10分)

热门文章

  1. win10系统下nodejs安装及环境配置
  2. yolact-训练自己的数据集
  3. 基于图像处理的工具尺寸测量
  4. 备品管理方案怎么写_设备借用管理制度
  5. perl mysql 数据推拉_用perl 从mysql取出数据做统计分析代码
  6. 还记得Microsoft PowerToys吗? Windows 10正在获取它们
  7. 【Python3爬虫(二)】【urlib.request模块】【付费代理+auth认证】
  8. windows删除文件失败、文件访问被拒绝,需要system的权限
  9. 2023年厦门大学有机化学专业考研上岸前辈备考经验指导
  10. SLAM及深度学习环境配置总教程