单词统计
2015-09-09 14:29
393 查看
题目描述:
输入一段英文文本,用程序统计出现频率最高和最低的两个单词;
仅大小写不同的单词算同一个单词;
如果两个单词出现次数相同,则在文本中首次出现的单词优先返回。
返回的单词统一用小写字母返回
英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(a-z、A-Z)
单词之间的分隔符仅考虑这三种:空格( )、英文逗号(,)、英文句号(.);
例如:
输入字符串“Hello world, i said hello world to the world”,返回“world”,“i”
输入字符串“Somebody like somebody,i do not like it”,返回“somebody”,“i”
要求实现函数:
void WordStat(const char * pInputStr, char * pOutputHotWord, char * pOutputColdWord);
【输入】 pInputStr: 输入字符串,指向一段英文文本
【输出】 pOutputHotWord: 输出字符串,返回出现次数最多的单词,该指针所指存储空间已经分配好,且足够大
pOutputColdWord:输出字符串,返回出现次数最少的单词,该指针所指存储空间已经分配好,且足够大
示例
输入:“Hello world, i said hello world to the world”
代码实现:
输入一段英文文本,用程序统计出现频率最高和最低的两个单词;
仅大小写不同的单词算同一个单词;
如果两个单词出现次数相同,则在文本中首次出现的单词优先返回。
返回的单词统一用小写字母返回
英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(a-z、A-Z)
单词之间的分隔符仅考虑这三种:空格( )、英文逗号(,)、英文句号(.);
例如:
输入字符串“Hello world, i said hello world to the world”,返回“world”,“i”
输入字符串“Somebody like somebody,i do not like it”,返回“somebody”,“i”
要求实现函数:
void WordStat(const char * pInputStr, char * pOutputHotWord, char * pOutputColdWord);
【输入】 pInputStr: 输入字符串,指向一段英文文本
【输出】 pOutputHotWord: 输出字符串,返回出现次数最多的单词,该指针所指存储空间已经分配好,且足够大
pOutputColdWord:输出字符串,返回出现次数最少的单词,该指针所指存储空间已经分配好,且足够大
示例
输入:“Hello world, i said hello world to the world”
代码实现:
import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 输入一段英文文本,用程序统计出现频率最高和最低的两个单词; 仅大小写不同的单词算同一个单词; 如果两个单词出现次数相同,则在文本中首次出现的单词优先返回。 返回的单词统一用小写字母返回 英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(a-z、A-Z) 单词之间的分隔符仅考虑这三种:空格( )、英文逗号(,)、英文句号(.); 例如: 输入字符串“Hello world,i said hello world to the world”,返回“world”,“i” 输入字符串“Somebody like somebody,i do not like it”,返回“somebody”,“i” * */ public class WordStat { public static void main(String[] args) { Scanner cin=new Scanner(System.in); String input; while(cin.hasNext()){ input=cin.nextLine(); if(!valid(input)) return; wordStat(input); } } private static boolean valid(String input) { if(null==input||"".equals(input)) return false; // Pattern pattern=Pattern.compile("[a-zA-Z\\s\\,\\.]+"); Pattern pattern=Pattern.compile("[a-z\\s\\,\\.]+",Pattern.CASE_INSENSITIVE);//忽略大小写 Matcher matcher=pattern.matcher(input); if(matcher.matches()) return true; return false; } private static void wordStat(String input) { if(null==input||"".equals(input)) return; String[] words=input.split("[\\s\\,\\.]"); LinkedHashMap<String, Integer> map=new LinkedHashMap<String, Integer>();//能够确保先后顺序 for (int i = 0; i < words.length; i++) { String temp=words[i]; if(temp!=null&&!"".equals(temp)){ temp=temp.toLowerCase(); int count=1; if(map.containsKey(temp)){ count=map.get(temp); ++count; } map.put(temp, count); } } int max=1; String maxStr = null; int min=1; String minStr = null; Set<Entry<String, Integer>> set=map.entrySet(); //初始化最大最小值 for (Entry<String, Integer> ent:set) { max=ent.getValue(); maxStr=ent.getKey(); min=ent.getValue(); minStr=ent.getKey(); set.remove(ent); break; } for (Entry<String, Integer> ent:set) { if(ent.getValue()>max){ max=ent.getValue(); maxStr=ent.getKey(); }else if(ent.getValue()<min){ min=ent.getValue(); minStr=ent.getKey(); } } System.out.println(maxStr+","+minStr); } }
相关文章推荐
- javascript新手入门必读书籍推荐
- JS中的prototype
- SQL语句优化方案资料汇总
- 本质矩阵和基础矩阵的区别是什么
- 拍照并显示以及获取路径后上传
- Mysql 5.5 修改max_allowed_packet参数
- QQ互联不能使用的通用解决方法
- 阿里巴巴已拿下中国互联网半壁江山
- 编写一个服务端可以给多个客户端发送图片
- asp.net文件上传带进度条实现案例(多种风格)
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
- 关于企业投资所得是否需要再交所得税的问题
- 注释笔记
- java图形界面gui
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
- 今年Chinajoy除了showgirl看什么