A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qihuan 中级黑马   /  2015-7-11 23:26  /  408 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package practice;

  2. import java.util.Iterator;
  3. import java.util.Set;
  4. import java.util.TreeMap;

  5. /**
  6. * 需求:获取字符串中字母出现的次数。
  7. * 打印结果:a(1)c(2)...
  8. * 分析:通过结果发现,每一个字母都有对应的次数,数字与字母之间存在映射关系。
  9. *                 所以,选择map集合。
  10. * 思路:
  11. * 1.将字符串转换成字符数组,对每一个字母进行操作。
  12. * 2.定义一个Map集合,因为打印结果的字母有顺序,所以选择TreeMap集合。
  13. * 3.遍历字符数组
  14. *                 将每一个字母作为键去查Map集合。
  15. *                 如果返回null,将该字母和和1存入到Map集合中。
  16. *                 如果返回不为null,该字母在Map集合中已存在,就获取该次数并自增,然后该字母和自增后的次数存入Map集合中。
  17. * 4.将Map集合中的数组变成指定的字符串形式返回。
  18. * @author Qihuan
  19. *
  20. */
  21. public class TreeSetTest2 {
  22.         public static void main(String[] args) {
  23.                 String str = charCount("aaabbcccdefeddcbbbaaa");
  24.                 System.out.println(str);
  25.         }
  26.        
  27.         public static String charCount(String str){
  28.                 //将字符串转换为字符数组
  29.                 char[] chs = str.toCharArray();
  30.                
  31.                 //定义一个TreeMap集合
  32.                 TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
  33.                
  34.                 //定义计数器
  35.                 int count = 0;
  36.                 //遍历字符数组
  37.                 for (int i = 0; i < chs.length; i++) {
  38.                         //将chs[i]作为键,去查找集合,返回一个值
  39.                         Integer value = tm.get(chs[i]);
  40.                        
  41.                         //判断value是否为空,如果不为空,value赋值到count上
  42.                         if(value != null)
  43.                                 count = value;
  44.                         //如果为空,count加一,存的是(chs[i],1)
  45.                         count ++;
  46.                         tm.put(chs[i], count);
  47.                         //count初始化
  48.                         count = 0;
  49.                        
  50. //                        if (value == null) {
  51. //                                tm.put(chs[i], 1);
  52. //                        }else{
  53. //                                value = value + 1;
  54. //                                tm.put(chs[i], value);
  55. //                        }
  56.                 }
  57.                
  58.                 //新建缓冲区,用于接收字符串
  59.                 StringBuilder sb = new StringBuilder();
  60.                
  61.                 Set<Character> keySet = tm.keySet();
  62.                
  63.                 //iterator遍历集合
  64.                 for(Iterator<Character> it = keySet.iterator();it.hasNext();){
  65.                         Character k = it.next();
  66.                         Integer v = tm.get(k);
  67.                         sb.append(k+"("+v+")");
  68.                 }
  69.                
  70.                 //返回结果
  71.                 return sb.toString();
  72.         }
  73. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马