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

本帖最后由 陈培果 于 2014-5-10 19:22 编辑
  1. /*
  2. 练习:
  3. "sdfgzxcvasdfxcvdf"获取该字符串中字母出现的次数
  4. 希望打印结果:a(1)c(2)....

  5. 通过结果发现,每一个字母都有对应的次数。
  6. 说明字母和次数之间都有映射关系。

  7. 注意了,当发现有映射关系的时候,可以选择map集合
  8. 因为map集合中存放的就是映射关系。

  9. 什么时候使用map集合呢?
  10. 当数据之间存在映射关系时,就要先想到map集合

  11. 思路:
  12. 1、将字符串转换成字符数组。因为要对每一个字母进行操作

  13. 2、定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合

  14. 3、遍历字符数组。
  15.         将每一个字母作为键去查map集合
  16.         如果返回null,将字母和1存入到map集合中
  17.         如果返回不是null,说明该字母在map集合已经存在并有对应次数
  18.         那么就获取该次数并进行自增,然后将该字母和自增后的次数存入
  19.         到map集合中。覆盖掉原有键锁对应的值。

  20. 4、将map集合中的数据变成指定的字符串形式返回。
  21. */
  22. import java.util.*;
  23. class MapTest3
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 String s=charCount("afsafsccfsafadada");
  28.                 System.out.println(s);
  29.         }
  30.         public static String charCount(String str)
  31.         {
  32.                 char[] chs=str.toCharArray();//将字符串转换成字符数组
  33.                 TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
  34.                                                                         //定义TreeMap集合,字母为键个数为值
  35.                 int count=0;
  36.                 for (int x=0;x<chs.length ;x++ )
  37.                 {
  38.                         if(!((chs[x]>='a' && chs[x]<='z') || (chs[x]>='A' && chs[x]<='Z')));
  39.                                 continue;        //有问题
  40.                         Integer value =tm.get(chs[x]);//迭代器遍历,并通过 键 chs[x]获取字母个数
  41.                
  42.                         if (value!=null)
  43.                                 count=value;
  44.                         count++;
  45.                         tm.put(chs[x],count);

  46.                         count=0;
  47.                         /*
  48.                         if (value==null)
  49.                         {
  50.                                 tm.put(chs[x],1);
  51.                         }
  52.                         else
  53.                         {
  54.                                 value=value+1;
  55.                                 tm.put(chs[x],value);
  56.                         }
  57.                         */
  58.                 }
  59.                 //System.out.println(tm);
  60.                
  61.                 StringBuilder sb=new StringBuilder();
  62.                 //使用缓冲器,接受任何数据类型,都可以变成字符串
  63.                 Set<Map.Entry<Character,Integer>> entrySet=tm.entrySet();//使用enterSet方式取出tm
  64.                 Iterator<Map.Entry<Character,Integer>> it=entrySet.iterator();//遍历
  65.                 while (it.hasNext())
  66.                 {
  67.                         Map.Entry<Character,Integer> me=it.next();//遍历映射关系
  68.                         Character ch=me.getKey();
  69.                         Integer value =me.getValue();
  70.                         sb.append(ch+"("+value+")");
  71.                 }

  72.                 return sb.toString();//转成字符串
  73.         }
  74. }
  75. /*
  76. 这个练习本来做完了,但是最后毕老师说加两条语句,可以屏蔽特殊字符的打印
  77. if(!((chs[x]>='a' && chs[x]<='z') || (chs[x]>='A' && chs[x]<='Z')));
  78.                                 continue;        //有问题
  79. 但是我编辑。结果老是这样:
  80. if(!((chs[x]>='a' && chs[x]<='z') || (chs[x]>='A' && chs[x]<='Z')));
  81.                                 continue;        //有问题
  82. 请师兄姐们帮忙看一下。
  83. */
复制代码


5 个回复

倒序浏览
  1. if(!((chs[x]>='a' && chs[x]<='z') || (chs[x]>='A' && chs[x]<='Z')));
  2.                                 continue;        //有问题
复制代码


if后面加逗号肯定错了啊。细心点。
回复 使用道具 举报
if 语句后面怎么可以加分号呢,把分号去掉应该就没问题了。
回复 使用道具 举报
:L虽然不太清楚细节,但是if行最后一个分号是结束if的标志,continue跟if没关系了
回复 使用道具 举报
ehuashao 发表于 2014-5-10 09:04
if后面加逗号肯定错了啊。细心点。

汗,谢谢师兄,我找了好久错误,可短算找到了。
以后一定一定细心。:lol
回复 使用道具 举报
Yov正 发表于 2014-5-10 09:14
虽然不太清楚细节,但是if行最后一个分号是结束if的标志,continue跟if没关系了 ...

恩,多写了一个;  现在找到原因了,谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马