统计字符串中出现最多的字符和出现次数

本文介绍了两种Java方法来统计字符串中最常出现的字符及其频率。第一种方法利用Map存储字符和出现次数;第二种方法通过将字符串转为数组并按Unicode排序,结合lastIndexOf()计算字符计数。

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

第一种方式:利用key-value方式进行统计,将字符作为key,出现次数作为value,所以需要先创建一个map

public static String maxCount(String str){

        Map<Character,Integer> map= new HashMap<>();

//利用for循环将字符串中每个字符拿出来,看是否存在map中
        for (int i = 0; i < str.length(); i++) {
             //如果不存在,存入map,value为一
            if (map.get(str.charAt(i))==null){
                map.put(str.charAt(i),1);
            }else {
                //如果存在,将value加一
                Integer integer = map.get(str.charAt(i));
                integer++;
                ass.put(str.charAt(i),integer);
            }
        }

        char name = ' ';
        int maxCount =0;
        for (char key:map.keySet()){

            if (map.get(key)>maxCount){

                maxCount = map.get(key);

                name = key;

            }

        }

        return "出现最多的字母是"+name+",共出现了"+maxCount+"次";
    }

第二种方式:先将字符串转换为数组,再将数组内字符由Unicode的编码由大到小进行排序,再用 lastIndexOf(),统计到此字符最后出现的位置进行运算得出字符数,代码如下:

    public static String maxCount1(String s){

        String[] split = s.split("");
        //将数组的字符由大到小 进行排序
        Arrays.sort(split);


        //原始方式,使数组变为字符串,这里我用原始的数组转换字符串方法
        //运用StringUtils方法,请看我上一篇文章
          String join ="";
          for (String string : split) {
          join= join.concat(string+",");
             }  
          join = join.substring(0,join.length()-1);
    

          String name = "";
          int maxCount=0;


          for (int i = 0; i < join.length(); i++) {

            String name1 = join.substring(i,i+1);//获取字符

            //获取此字符最后出现的位置
            int j = join.lastIndexOf(name1);

            //得到此字符出现总次数
            int count = j-i+1;

            if (count==maxCount){
                name = name1+"和"+name;
               }
            if (count>maxCount){
                maxCount = count;
                name = name1;
                  }
              i = j;
           }

        return "出现次数最多的字符是:"+name+",出现次数:"+maxCount;

    }

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值