TreeMap获取字符串中字母出现次数

需求:”ahg,,djks..bvagav?vftk”获取该字符串中字母出现的次数
希望打印结果:a(3)b(1)d(1)f(1)g(2)h(1)j(1)k(2)s(1)t(1)v(3)

通过打印结果发现每一个字母都有对应的次数,说明了字母和次数之间有映射关系。所以可以选择map集合,因为map集合中的存放就是映射关系。

思路:

  1. 将字符串转换成字符数组。因为要对每个字母进行操作。
char[] chs=str.toCharArray();
  1. 定义一个map集合,因为打印结果的字母有序,所以使用TreeMap.
TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
  1. 遍历字符数组
    将每一个字母作为键去查map集合。如果返回null,将该字母和1存入map集合;如果返回不是null,说明该字母在map集合中已经存在并有对应的次数,,那么就获取该次数并进行自增,然后将该字母和自增后的次数存入map集合,覆盖原来键所对应值。
  2. 将map集合中的数据变成指定的字符串形式返回。

“`
import java.util.*;
public class TreeMapTest1 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String s=charCount("ahg,,djks..bvagav?vftk");
    System.out.print(s);
}

public static String charCount(String str)
{
    char[] chs=str.toCharArray();

    TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();

    int count=0;
    for(int x=0;x<chs.length;x++)
    {

        if(!(chs[x]>='a'&&chs[x]<='z'||chs[x]>='A'&&chs[x]<='Z'))
            continue;

        Integer value=tm.get(chs[x]);

        if(value!=null)
            count=value;
        count++;
        tm.put(chs[x], count);

        count=0;
        /*
        if(value==null)
        {
            tm.put(chs[x], 1);
        }
        else
        {
            value=value+1;
            tm.put(chs[x], value);
        }
        */
    }

    //System.out.println(tm);

    StringBuilder sb=new StringBuilder();
    Set<Map.Entry<Character,Integer>> entry=tm.entrySet();

    Iterator<Map.Entry<Character,Integer>> it=entry.iterator();
    while(it.hasNext())
    {
        Map.Entry<Character,Integer> me=it.next();
        Character key=me.getKey();
        Integer value=me.getValue();

        //System.out.print(key+"("+value+")");
        sb.append(key+"("+value+")");
    }


    return sb.toString();
}

}
运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值