详解【java实现】编写一个程序,从键盘读入一段英文(多行),找出其中所有的英文单词,统计每个单词出现的次数,并按照单词出现次数由大到小排序后输出。

题目:
编写一个程序,从键盘读入一段英文(多行),找出其中所有的英文单词,统计每个单词出现的次数,并按照单词出现次数由大到小排序后输出。

前言:
统计每个单词出现的次数,并且按照由大到小排序输出”,根据此特征,我们很容易想到可以用hashMap来解决,其次另外一个难点是如何实现多行输入,老师说是允许先定义输入的行数,这里我们提升点难度,在不需要知道输入行数的情况下实现

相关知识链接:
1.map.containsKey方法的运用
2.面试经常问HashMap,基本用法及四种遍历方式
3.List集合与数组相互转化 : 以String类型为例
4.java中如何将字符串数组转换成字符串
5.Java 字符串转char数组

上代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class demo2 {
	static char[]ch;
	static String s;
	public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    ArrayList<String>arrylist=new ArrayList<String>();
    while(true){//先做个死循环
    	 String s=sc.nextLine();
    	if(s.equals("")) {//若接收了回车键就停止循环
    		break;
    	}
    	else
    	{
    		arrylist.add(s);//停止输入前一直将字符串放入集合
    	}
    	
    }
    String[] ss=arrylist.toArray(new String[arrylist.size()]);//将集合转化为数组,链接详解
    StringBuffer sb = new StringBuffer();//字符串缓冲区
    for(int i = 0; i < ss.length; i++){
     sb. append(ss[i]);
    }
    String str = sb.toString();//将缓冲区内容转化为字符串
    ch=str.toCharArray();   
    //新建hashMap
    HashMap<Character, Integer> map=new HashMap<Character, Integer>();
    /*遍历字符数组,三目运算,
    若第一次遍历到该字符则存储键并赋值1,
    若非第一次则旧键值+1*/
   for(char c:ch) {
	map.put(c,!map.containsKey(c)?1:map.get(c)+1);
		 }
	     while(!map.isEmpty()) {//判断该map是否为空,因为后面要进行移除键值对操作
	  int maxValue =0;//假设定义最大键值为0
	  Character maxkey =null;//设置最大键为null
	  for(Character key:map.keySet()) {//遍历map所有键,用key接收
	  int value=map.get(key);//value接收键值
	  if(maxValue<value) {//若当前遍历的键值大于maxValue,则更新最大键和最大键值
			maxValue=value;
			maxkey=key;
				 }
			 }
	System.out.println(maxkey+":"+maxValue);//输出该次遍历得到的最大键值对
	map.remove(maxkey);//将最大键值对移除,重写找第二大键值对
			 }
			 }
			 }

效果:
输入多行,最后按两下回车结束输入,输出结果
在这里插入图片描述

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值