北京理工大学 单词识别(java)(hashmap排序)

题目描述
输入一个英文句子,把句子中的单词(不区分大小写)按字典序在屏幕上输出来,要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。
输入描述:
输入有若干行,总计不超过1000个字符。
输出描述:
输出格式参见样例。
示例1
输入
复制
A blockhouse is a small castle that has four openings through which to shoot.
输出
复制
a:2
blockhouse:1
castle:1
four:1
has:1
is:1
openings:1
shoot:1
small:1
that:1
through:1
to:1
which:1
import java.util.*;
import java.io.*;
import java.text.*;
import java.math.*;
public class Main{
	static int count;
	public static void main(String[] args) {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String str;
			while((str = br.readLine()) != null) {
				HashMap<String, Integer> map = new HashMap<>();
				String[] parts = str.split(" |\\.|,"); //|, ., &, *, + 是转义字符, 要加\\
				for(int i = 0; i < parts.length; i++) {
					char[] ch = parts[i].toCharArray();
					for(int j = 0; j < ch.length; j++) {
						if(ch[j] >= 'A' && ch[j] <= 'Z') ch[j] = (char)(ch[j] +'a' -'A');
					}
					parts[i] = new String(ch);
					if(!map.containsKey(parts[i])) map.put(parts[i], 1);
					else {
						map.put(parts[i], map.get(parts[i])+1);
					}
				}
	     		List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet()); //转换为list
		        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
		            @Override
		            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
		                return o1.getKey().compareTo(o2.getKey());
		            }
		        });
		         for (int i = 0; i < list.size(); i++) {
		        	 if((list.get(i).getKey()).length() == 0) continue;
		             System.out.println(list.get(i).getKey() + ":" + list.get(i).getValue());
		         } 	
			}
		} catch(IOException e) {
			e.printStackTrace();
		}
	}
}
发布了252 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43306331/article/details/104329369