获取字符串中字母出现的次数,并将它打印成a(2)b(3)....等的方式

package com.chanchan.java;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class getString {
    public static void main(String[] args) {
        System.out.println(getstr( "abcbcdacg" ));
    }
    public static String getstr(String str) {
        //第一步,将字符串转化成字符数组
        char[] chars = str.toCharArray();
        //出啊构建一个集合,用来存储字符以及它们的映射关系
        //因为字符串和出现的次数是映射关系,字符出现也有顺序,所以使用treeMap集合来存储
        //同时,集合中存储的都是对象的引用类型,所以要将对象的基本数组类型转化成他们的封装数据类型
        TreeMap<Character,Integer> tm=new TreeMap<Character, Integer>();
        //第二步,遍历数组元素,将数组元素存入对应的集合中,首先要进行判断
        int count=0;  //这个count也可以放在里面,但是这样的话耗费内存,每次都开辟内存再释放,开辟释放循环.
        for(int i=0;i<chars.length;i++){
            //如果字符串中出现了非字母,可以添加一层判断,去除掉非字母元素.
            if(!(chars[i] >'a' &&chars[i]<'z'  || chars[i]>'A'  && chars[i]<'Z') )
                continue;
            //判断数组中的元素在集合中是否存在,如果不存在,添加,如果存在,取出key让key加一,再将元素重新存入
            Integer value=tm.get( chars[i] );
            /*
            if (tm.get(chars[i])==null){
                tm.put( chars[i],1 );
            }else {
                value=value+1;
                tm.put( chars[i],value );
            }
             */
            if(value!=null)  //优化后的结果
                count=value;
            count++;
            tm.put( chars[i],count );
            count=0;  //每次调用过程之后清零
        }
        System.out.println(tm);
        //定义一个StringBuilder
        StringBuilder sb=new StringBuilder();
        //将字符串存储在集合之后,在打印出来,使用StringBuilder,首先要遍历这个集合,使用entrySet方法
        //使用entrySet方法,将map的数据银蛇关系存储到set集合中
        Set<Map.Entry<Character, Integer>> entr = tm.entrySet();
        //通过迭代器遍历set集合
        Iterator<Map.Entry<Character, Integer>> it = entr.iterator();
        while (it.hasNext()){
            Map.Entry<Character,Integer> ch= it.next();
            Character key = ch.getKey();
            Integer value = ch.getValue();
            sb.append( key+"("+value+")" );
        }
        return sb.toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值