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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王章亚 中级黑马   /  2012-5-30 09:02  /  1943 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字符串“yekmaakkccekymbvb”,求出字符串中多少种字符,以及每个字符的个数?

6 个回复

倒序浏览
很简单,可以用二维数组,也可以用map集合
思路就是读取字符串中每个字符,然后用一个变量保存读取的个数
回复 使用道具 举报
楼主一连问这样两个问题,我觉得应该好好把毕老师的教程再看一看了,都挺简单的
day13-01-String(概述)
day13-02-String(常见功能-获取和判断)
day13-03-String(常见功能-转换)
day13-04-String(常见功能-切割和替换)
day13-05-String(常见功能-比较和去除空格)
day13-06-String(字符串练习1)
day13-07-String(字符串练习2)
day13-08-String(字符串练习3)
day13-09-String(字符串练习4)
day13-10-StringBuffer(常见功能-添加)
day13-11-StringBuffer(常见功能-删除和修改)
day13-12-StringBuilder
回复 使用道具 举报
用map集合来做
实现代码如下:
class Test06
{
        public static void main(String[] args)
     {
                String str = new String("abaaacdefgabcd");
               TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
               char[] arr = str.toCharArray();
                int times=0;
               int total = 0;
              for(char c: arr)
                  {
                         for(int i = 0;i<arr.length;i++)
                           {
                              if(c==arr)
                              times++;
                           }
                         tm.put(Character.valueOf(c),Integer.valueOf(times));
                       times=0;
               }
            StringBuilder strb = new StringBuilder();
              Set<Character> ts = tm.keySet();
             Iterator<Character>  it = ts.iterator();
     while(it.hasNext())
           {
                Character key = (Character)it.next();
                      total++;
                Integer value = (Integer)tm.get(key);
               strb.append(key+"("+value+")");
          }
                System.out.println(strb.toString()+"总共"+total+"种字符");
    }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
public static void main(String[] args) {
                String str = "yekmaakkccekymbvb";
                Map<String,Integer> map=new HashMap<String,Integer>();
               
                //循环取值放入map中
                for (int i = 0; i < str.length(); i++) {
                        Integer value=1;
                        if(map.containsKey(str.substring(i, i + 1)))//当已存在值时加1
                        {
                                value=map.get(str.substring(i, i + 1));
                            value=value+1;
                        }
                        map.put(str.substring(i, i + 1),value);
                }
                System.out.println("字符长度:"+str.length());
                //根据KEY值遍历
                for(String key:map.keySet())
                {
                        System.out.println("字符:"+key+",次数:"+map.get(key));
                }
        }

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
也可以用面向对象的思想,创建一个元素类,包括元素值和元素个数。
创建一个List集合用于存放元素类的对象。
然后用charAt()循环遍历字符串 ,比较charAt()方法得到的元素值与List集合中的对象的元素值
如果没有就新建一个元素类对象,set 元素个数为1,如果存在就set 个数=元素个数+1;
最后对List中的元素进行取你需要的值。
回复 使用道具 举报
我也写了一个我程序,我取了个巧是按照输入的字符串全是英文字母来写的,以这些英文字母作为基本字符,取出一个通过for操作与输入的字符全比较一遍统计出来。程序如下:
  1. public class CountTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String str="abddsscdr";
  6.                 countSort(str);
  7.                
  8.         }
  9.         public static void countSort(String str)
  10.         {
  11.                 char[] chs=str.toLowerCase().toCharArray();
  12.                 char[] basechars=new char[26];
  13.                 int count=0;
  14.                 for(int i=0;i<26;i++)
  15.                 {
  16.                         count=0;
  17.                         basechars[i]=(char)(97+i);
  18.                         for(char ch:chs)
  19.                         {
  20.                                 if(basechars[i]==ch)
  21.                                 {
  22.                                         count++;
  23.                                 }       
  24.                         }
  25.                         if(count>0)
  26.                         {
  27.                                 System.out.println(basechars[i]+":"+count);
  28.                         }
  29.                
  30.                 }
  31.     }
  32.             
  33. }
复制代码
打印结果是:
a:1
b:1
c:1
d:3
r:1
s:2

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马