您的位置:首页 > 其它

单词统计

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”

代码实现:

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);
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: