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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

怎样将一个字符串中的每个字符单独取出,并计算单个字符在此字符串中的个数。
例如:将字符串“bcdabncd”中找出 c 的个数,并输出格式为 c(2)

14 个回复

倒序浏览
楼主可以参考下

CharCountDemo.zip

699 Bytes, 下载次数: 108

回复 使用道具 举报
使用字符串获取元素方法(利用字符串长度循环)
定义一个计数变量计数
最后打印  元素+“(”+count+“)”就可以了

最近刚学到String方法的部分
回复 使用道具 举报
是否是这样:
  1. public class ListTest01 {
  2.         
  3.         public static void getStr(){
  4.                 String str = "abcdabcd";
  5.                 // 把字符串转为byte 字节数组
  6.                 byte[] bt = str.getBytes();
  7.                 for (int i = 0; i < bt.length; i++) {
  8.                         // 定义一个变量保存字符出现的次数
  9.                         int count = 0;
  10.                         for (int j = 0; j < bt.length; j++) {
  11.                                 // 内外循环进行比对,如果出现相同的字符,count+1
  12.                                 if(bt[i] == bt[j]){                                       
  13.                                         count++;
  14.                                 }
  15.                         }//把 byte的 ASCUU 转为char类型
  16.                         char c = (char)bt[i];
  17.                         // 在内循环结束后输出,这样外循环开始时,count清零
  18.                         System.out.println(c+"有"+count+"个");
  19.                 }
  20.         }
  21.         public static void main(String[] args) {
  22.                 getStr();
  23.         }
  24. }
复制代码
输出结果:
  1. a有2个
  2. b有2个
  3. c有2个
  4. d有2个
  5. a有2个
  6. b有2个
  7. c有2个
  8. d有2个
复制代码
回复 使用道具 举报
  1. import java.util.*;

  2. class Test
  3. {
  4.         public static void main(String...args)
  5.         {
  6.                 Scanner in = new Scanner(System.in);
  7.                 System.out.println("请输入字符串:");
  8.                 String line = in.nextLine();
  9.                 System.out.println("请输入要查询个数的字符");
  10.                 char ch = in.next().charAt(0);
  11.                 int num = 0;
  12.                 for(int i=0; i<line.length();i++)
  13.                 {
  14.                         if(line.charAt(i) == ch)
  15.                                 num++;
  16.                 }
  17.                 System.out.println(ch + "(" + num + ")");
  18.         }
  19. }
复制代码
回复 使用道具 举报
回复 使用道具 举报
大西洋 发表于 2015-5-1 23:17
是否是这样:
输出结果:

初学者,麻烦解释一下,这里不是数组吗?为什么不符合数组的定义格式啊?求解!!

麻烦大神解释一下.png (16.61 KB, 下载次数: 55)

麻烦大神解决下

麻烦大神解决下
回复 使用道具 举报
这是第12天的内容 String 类中讲解的一个方法。你看下
回复 使用道具 举报
本帖最后由 大西洋 于 2015-5-3 19:46 编辑
adminlxb 发表于 2015-5-3 18:32
初学者,麻烦解释一下,这里不是数组吗?为什么不符合数组的定义格式啊?求解!!
...

首先,我不是大神 :lol
其次,你的问题,在JDK 1.6 API中有明示:

getBytes()
          使用Java的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
==  
所以这个过程,其实就是把String字符直接存入一个新的byte数组的过程。




回复 使用道具 举报
  1. //方法1,用集合
  2.                 String s = "bcdabncd";
  3.                 //定义map容器,键是字符,值是次数.
  4.                 HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
  5.                 char[] arr = s.toCharArray();
  6.                 for (char c : arr) {
  7.                         //如果map容器中不存在键,则将键存入到容器中,值为1.
  8.                         if (hm.get(c) == null)
  9.                                 hm.put(c, 1);
  10.                         //如果map容器中存在键,则提取该键的值,并加1次.
  11.                         else
  12.                                 hm.put(c, hm.get(c) + 1);
  13.                 }
  14.                 //迭代map容器
  15.                 Set<Entry<Character, Integer>> entrySet = hm.entrySet();
  16.                 Iterator<Entry<Character, Integer>> it = entrySet.iterator();
  17.                 while (it.hasNext()) {
  18.                         Entry<Character, Integer> en = it.next();
  19.                         Character key = en.getKey();
  20.                         Integer value = en.getValue();
  21.                         System.out.print(key + "[" + value + "]");
  22.                 }

  23. //方法2,用空字符替代指定字符,计算先后长度缩减的量,就是出现的次数.
  24.                 String s = "bcdabncd";
  25.                 while (s.length() > 0) {
  26.                         //取第一个字符.
  27.                         String str = s.substring(0, 1);
  28.                         //用空字符(不是空格字符)替代所有的指定字符.
  29.                         String s2 = s.replaceAll(str, "");
  30.                         //计算长度缩减的值
  31.                         int times = s.length() - s2.length();
  32.                         System.out.print(str + "[" + times + "]");
  33.                         //用被空字符替换后的字符串,取代之前的字符串,继续下一次循环.
  34.                         s = s2;
  35.                 }
复制代码


点评

抱歉,备注有个笔误, 是07行, 应该是如果键c 的 值( hm.get(c) ) 不存在.  发表于 2015-5-3 21:18
回复 使用道具 举报
大西洋 发表于 2015-5-3 19:43
首先,我不是大神
其次,你的问题,在JDK 1.6 API中有明示:

Thank You! 好像理解了,不过我还没有看到这个块呢,不过现在要提前看了。。。。:handshake
回复 使用道具 举报
大西洋 发表于 2015-5-1 23:17
是否是这样:
输出结果:

真牛  谢谢啦
回复 使用道具 举报

都是大神级别的啊
回复 使用道具 举报
as12510 发表于 2015-5-3 18:39
这是第12天的内容 String 类中讲解的一个方法。你看下

好的    知道了   谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马