"sdfasfsaf"获取该字符串中的字母出现的次数,希望打印结果为:a(4)c(2);
思路:
1将字符串转换成字符数组,因为要对每一个字母进行操作
2定义一个map集合,因为打印结果的字母有顺序,所以使用Treemap集合
3遍历字符数组.
将每一个字母作为键去查map集合
如果返回null,将该字母和1存入到map集合中
如果返回不是null,说明该字母在map集合已经存在并有对应的次数
那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中,覆盖到原来键对应的值
4 将map集合中的数据变成指定的字符串形式返回
import java.util.*;
class MapTest3
{
public static void main(String[] args)
{
String s = charCount("aa21.bfcdabcdefa");
System.out.println(s);
}
public static String charCount(String str)
{
char[] chs = str.toCharArray();//关键字toCharArray 字符串变成数组
TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();//建立数组的集合 泛型接受的都是引用数据类型 所以要 基本数据类型包装类
int count = 0;//定义在for外面 只开辟一次空间
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]);//键所对应的值 返回给value(通过get方法)
//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);
}
}
StringBuilder sb = new StringBuilder();//遍历完存入缓冲区
Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
while(it.hasNext())
{
Map.Entry<Character,Integer> me = it.next();
Character ch = me.getKey();
Integer value = me.getValue();
sb.append(ch+"("+value+")");
}
return sb.toString();
}
}
|
|