【java】从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次。

本文介绍了一个Java程序,该程序从控制台接收一个字符串输入,然后统计并输出出现次数最多的字符及其出现次数。程序使用了HashMap来存储字符及其频率,通过双重循环遍历字符串,最后输出最频繁出现的字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例如:

从控制台输入 hello,输出: 出现次数最多的字符是 'l',出现了2次。

从控制台输入 helle,输出: 出现次数最多是字符出 'l'和'e',出现了2次

 

package day0715.work;

import org.junit.Test;

import java.util.*;

public class work01 {
    public static void main(String[] args) {
        String str = "";
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        //从控制台输入一个字符串
        str=scan.nextLine();
        //     System.out.println(str.length());
       //输出方法
        recordAppearMostFrequently(str);
    }
    //【难】从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次。
    public static void recordAppearMostFrequently(String str){
        Map<Character,Integer> map = new HashMap<>();//设置一个map集合用来存储字符和字符出现的次数的集合
        int count=0;//count用来单个字符出现的次数
        int []sum=new int[str.length()];//sum用来记录所有的字符出现的次数
        //两层循环遍历
        for(int i=0;i<str.length();i++){
            for(int j=0;j<str.length();j++){
                if(str.charAt(i)==str.charAt(j))
                    count++;
            }
            sum[i]=count;
            count=0;//count归零
        }
        //打印数组:
        //printArray(sum);
        int maxIndex=maxIndexOfArray(sum);//求到出现次数最多的那个值的下标
        map.put(str.charAt(maxIndex),sum[maxIndex]);//存入map集合
        for(int i=0;i<sum.length;i++){
          //判断条件
            if(sum[i]==sum[maxIndex]&&str.charAt(i)!=str.charAt(maxIndex)){
                map.put(str.charAt(i),sum[i]);
            }
        }
        //遍历map集合
        System.out.print("出现次数最多的字符是");
       //遍历map集合
        keySet(map);
        System.out.println("出现了"+map.get(str.charAt(maxIndex))+"次.");
    }
    //遍历数组
    public static void printArray(int[] array){
        for(int i:array)
            System.out.print(i+" ");
        System.out.println();
    }
    //使用keySet遍历集合
    public static void keySet(Map<Character,Integer> map){
        //1.获取存储了所有的键的集合
        Set<Character> keys=map.keySet();
        //2.遍历整个Set集合
        for(Character key:keys){
            //2.1通过键获取值
            int value = map.get(key);
            System.out.print("'"+key+"'"+",");
           // System.out.println("key="+key+",value="+value);
        }
    }
    //求最大值的下标
    public static int maxIndexOfArray(int[] array){
        int max=Integer.MIN_VALUE;
        int maxIndex=0;
        for(int i=0;i<array.length;i++){
            if(max<array[i]){
                max=array[i];
                maxIndex=i;
            }
        }
        return maxIndex;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值