黑马程序员技术交流社区

标题: 一个字符串操作问题 [打印本页]

作者: 王章亚    时间: 2012-5-30 09:02
标题: 一个字符串操作问题
字符串“yekmaakkccekymbvb”,求出字符串中多少种字符,以及每个字符的个数?
作者: 张晨    时间: 2012-5-30 09:17
很简单,可以用二维数组,也可以用map集合
思路就是读取字符串中每个字符,然后用一个变量保存读取的个数
作者: 张亭    时间: 2012-5-30 09:32
楼主一连问这样两个问题,我觉得应该好好把毕老师的教程再看一看了,都挺简单的
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
作者: 揭耀祖    时间: 2012-5-30 09:36
用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+"种字符");
    }
}


作者: 黑马—陈磊    时间: 2012-5-30 09:45
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));
                }
        }
作者: 吴小东    时间: 2012-5-30 10:27
也可以用面向对象的思想,创建一个元素类,包括元素值和元素个数。
创建一个List集合用于存放元素类的对象。
然后用charAt()循环遍历字符串 ,比较charAt()方法得到的元素值与List集合中的对象的元素值
如果没有就新建一个元素类对象,set 元素个数为1,如果存在就set 个数=元素个数+1;
最后对List中的元素进行取你需要的值。
作者: 凡延海    时间: 2012-5-30 13:27
我也写了一个我程序,我取了个巧是按照输入的字符串全是英文字母来写的,以这些英文字母作为基本字符,取出一个通过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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2