看看我写的程序
- /*
- "sdfgzxcvasdfxcvdf"获取该字符中的字母出现的次数
- 希望打印结果:a(1)c(2)..
- 第一次用a字母作为键去找集合,那么集合中没有a这个键,所以也没有对应的次数。
- 返回null
- 如果是null 则将a字母和1存入集合
- 如果制定的键已经存在,说明有对应次数,就将对应的次数取出,并自增后在从新
- 存入集合
- 思路:
- 1、将字符串转换成字符数组,因为要对每一个字母进行操作
- 2、定义一个map集合,因为打印结果的字母有顺序。
- 3、遍历这个字符数组,
- 将每一个字符作为键去查map集合
- 如果返回null,就将该字符和1存入到map集合中。
- 如果返回不是null,说明该字母子啊map集合已经存在就获取对应次数并进行自增,
- 然后将该字母和自增后的次数存入到map集合中,,覆盖调用原来所对应的键,
- 4、将map集合中的数据变成制定的字符串形式返回
- */
- import java.util.*;
- class MapDemo2
- {
- public static void main(String[] args)
- {
- System.out.println(charCount("sdfgzxcvasdfxcvdf"));
- //System.out.println("Hello World!");
- }
- 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>> 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();
- }
- }
复制代码 |