Description
读入包含若干个单词的文本数据,将所有内容转换为大写,统计每个单词与该单词的出现次数。此外,还需要统计每个字符及其出现次数(不包括空格)。
Input
若干行的单词,以空格作为分隔符,每行单词数量不定。
遇到一行数据“0000”,读取数据结束。(字符串“0000”不计入上述统计数据)
Output
全部数据读取完成,输出如下信息:
(1)出现次数最多的单词及其出现次数;若次数相同,输出字典序最大的单词。
(2)出现次数最少的单词及其出现次数;若次数相同,输出字典序最小的单词。
(3)每个字母,按A到Z的顺序以及次数。
其中,单词和字母占10个字符位置,左对齐;计数(即:出现次数)占8位,右对齐。
Sample
Input
I would rather have had one breath of her hair
one KISS of her mouth one touch of her hand than an eternity without it
I WOULD rathER haVE HAD oNe BreatH Of Her Hair
ONE kiss of her mouth one touch of her hand than an eternity WITHOUT IT
0000
Output
ONE 6
AN 2
A 16
B 2
C 2
D 6
E 22
F 6
G 0
H 26
I 12
J 0
K 2
L 2
M 2
N 14
O 20
P 0
Q 0
R 16
S 4
T 20
U 8
V 2
W 4
X 0
Y 2
Z 0
Hint
Java语言,建议使用HashMap存储数据;
Python语言,建议使用dict存储数据。
思路:这道题可以使用Map集合, 这里用到了Map集合是一个键值对,可以实现键和值的一一对应,并且Map中键的值是唯一的不能重复的,所以这道题可以将单词设置为键的值,出现次数设置为键所对应的值。
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Map<String, Integer> map = new TreeMap<String, Integer>();//定义一个TreeMap(可以将集合中的键值对按照键的值得升序践行排列),也可以使用HashMap
//Map<String, Integer> map = new HashMap<String, Integer>();
//使用HashMap的代码(一共有两个地方需要替换)
//需要和上一行的TreeMap替换,并把下面的寻找出现次数最多的和最小的代码替换就可以
String str;
int[] book = new int[200];//记录每一个字符出现的次数
while (true)
{
str = input.nextLine();
if (str.equals("0000"))//循环结束条件
{
break;
}
str = str.toUpperCase();//题目要求将文本全部转化为大写字母
for (int i = 0; i < str.length(); i++)//记录改行字符串中每一个字符
{
book[str.charAt(i)]++;
}
String[] temp = str.split(" ");//通过split函数将字符串通过其中所含有的空格分开,分开后就成了一个个单词
for (int i =0; i < temp.length; i++)//将每个单词记录进map中
{
if (map.containsKey(temp[i]))//如果map中已经记录过该单词,将该单词对应的值加一
{
map.put(temp[i],map.get(temp[i]) + 1);
}
else//如果没有记录过,创建一个键值对
{
map.put(temp[i], 1);
}
}
}
String text_Max = null, text_Min = null;//记录出现次数最多的单词和出现最少的单词
int Max = 0, Min = 100000000;//记录出现次数最多和最少的次数
Iterator<Entry<String, Integer>> it = map.entrySet().iterator();//利用迭代器进行map集合的遍历
while (it.hasNext())
{
Entry<String, Integer> temp = it.next();
String key = temp.getKey();//单词
int value = temp.getValue();//出现次数
if (value >= Max)//题目要求输出字典序最大的
{
Max = value;
text_Max = key;
}
if (value < Min)//题目要求输出字典序最小的
{
Min = value;
text_Min = key;
}
//使用HashMap的方法,下面注释的替换上面对应的两个if语句
/*
if (value > Max || (value == Max && key.compareTo(text_max) > 0))
{
Max = value;
text_max = key;
}
if (value < Min || (value == Min && key.compareTo(text_min) < 0))
{
Min = value;
text_min = key;
}
*/
}
System.out.printf("%-10s%8d\n", text_Max, Max);
System.out.printf("%-10s%8d\n", text_Min, Min);
for (int i = 'A'; i <= 'Z'; i++)
{
System.out.printf("%-10c%8d\n", i, book[i]);
}
input.close();
}
}