SDUT java 单词和字符鉴别器

本文深入探讨了大数据处理的关键技术和工具,包括Hadoop、Spark和Flink的使用,以及在实际项目中如何进行高效的数据分析。同时,文章还提到了数据安全、数据加密和访问控制在大数据环境中的重要性,确保数据隐私和完整性。
摘要由CSDN通过智能技术生成

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

}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碧羽o(* ̄▽ ̄*)ブ回雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值