- package practice;
- import java.util.Iterator;
- import java.util.Set;
- import java.util.TreeMap;
- /**
- * 需求:获取字符串中字母出现的次数。
- * 打印结果:a(1)c(2)...
- * 分析:通过结果发现,每一个字母都有对应的次数,数字与字母之间存在映射关系。
- * 所以,选择map集合。
- * 思路:
- * 1.将字符串转换成字符数组,对每一个字母进行操作。
- * 2.定义一个Map集合,因为打印结果的字母有顺序,所以选择TreeMap集合。
- * 3.遍历字符数组
- * 将每一个字母作为键去查Map集合。
- * 如果返回null,将该字母和和1存入到Map集合中。
- * 如果返回不为null,该字母在Map集合中已存在,就获取该次数并自增,然后该字母和自增后的次数存入Map集合中。
- * 4.将Map集合中的数组变成指定的字符串形式返回。
- * @author Qihuan
- *
- */
- public class TreeSetTest2 {
- public static void main(String[] args) {
- String str = charCount("aaabbcccdefeddcbbbaaa");
- System.out.println(str);
- }
-
- public static String charCount(String str){
- //将字符串转换为字符数组
- char[] chs = str.toCharArray();
-
- //定义一个TreeMap集合
- TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
-
- //定义计数器
- int count = 0;
- //遍历字符数组
- for (int i = 0; i < chs.length; i++) {
- //将chs[i]作为键,去查找集合,返回一个值
- Integer value = tm.get(chs[i]);
-
- //判断value是否为空,如果不为空,value赋值到count上
- if(value != null)
- count = value;
- //如果为空,count加一,存的是(chs[i],1)
- count ++;
- tm.put(chs[i], count);
- //count初始化
- count = 0;
-
- // if (value == null) {
- // tm.put(chs[i], 1);
- // }else{
- // value = value + 1;
- // tm.put(chs[i], value);
- // }
- }
-
- //新建缓冲区,用于接收字符串
- StringBuilder sb = new StringBuilder();
-
- Set<Character> keySet = tm.keySet();
-
- //iterator遍历集合
- for(Iterator<Character> it = keySet.iterator();it.hasNext();){
- Character k = it.next();
- Integer v = tm.get(k);
- sb.append(k+"("+v+")");
- }
-
- //返回结果
- return sb.toString();
- }
- }
复制代码
|
|