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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘松703 中级黑马   /  2013-12-19 17:30  /  1150 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

*获取一个字符串中每个字符出现的次数。例如:"abkabklok"打印输出a(2)b(2)k(3)l(1)o(1)
*/
public class String_5{
        public static void main(String[] args){

                stringCount();
        }
        public static void stringCount(){
                String str="abkkajjuda";
                char[] ch=str.toCharArray();
                for(int i=0;i<str.length();i++){
                        int count=0;
                        int index=0;
                        while((index=str.indexOf(ch[i],index))!=-1){
                                index++;
                                count++;
                        }
                        System.out.print(ch[i]+"("+count+")");
                }
       }
}

我这种方法输出的结果有重复,该如何改善才能避免重复,前面字符a已经求出出现次数

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

倒序浏览
这是给你修改的,希望对你有帮助:
  1. public class Test{
  2.     public static void main(String[] args){

  3.             stringCount();
  4.     }
  5.     public static void stringCount(){
  6.             String str="abkkajjuda";
  7.             char[] ch=str.toCharArray();
  8.             char[] chs=new char[str.length()];
  9.             int m=0;
  10.            w: for(int i=0;i<str.length();i++){
  11.                     for(int j=0;j<chs.length;j++)
  12.                     {
  13.                             if(chs[j]==ch[i])
  14.                                     continue w;                          
  15.                     }                                         
  16.                     int count=0;
  17.                     int index=0;                    
  18.                     while((index=str.indexOf(ch[i],index))!=-1){
  19.                             index++;
  20.                             count++;
  21.                     }
  22.                     chs[m++]=ch[i];
  23.                  
  24.                     System.out.print(ch[i]+"("+count+")");
  25.             }
  26.            
  27.    }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
这个题我做过!东拼西凑把它做出来了,可能不是很好。
  1. import java.util.Set;
  2. import java.util.TreeSet;

  3. public class Test03 {

  4.         public static void main(String[] args) {
  5.                 String str = "abcdekka27qoq";
  6.                 characterCount(str);
  7.         }
  8.        
  9.         private static void characterCount(String str){
  10.                 //由于要取出字符串中字母出现的次数,所以要将字符串中的数字去掉;
  11.                 str = str.replaceAll("\\d", "");
  12.                 //获取没有重复字符的字符串;
  13.                 String str1 = singleCharacter(str);
  14.                
  15.                 //从没有重复字符串的第一个字符开始查找在原串中的个数;
  16.                 for(int i=0; i<str1.length(); i++){
  17.                         int count = getCount(str, str1.charAt(i));
  18.                         System.out.print(str1.charAt(i) + "(" + count + ")");
  19.                 }
  20.         }
  21.        
  22.         //该方法用来查找每个字符在字符串中出现的次数
  23.         private static int getCount(String str,char key){
  24.                 int count = 0;
  25.                 int index = 0;
  26.                
  27.                 //查找字符是否在字符串中存在,如果存在则计数器加1;不存在则退出循环;index记录查找到的字符出现的位置;
  28.                 while((index=str.indexOf(key)) != -1){
  29.                         //每查找到一个与key相同的字符后,下一次将从该位置起的下一个字符串开始查找;
  30.                         str = str.substring(index+1);
  31.                         count++;
  32.                 }
  33.                 return count;
  34.         }
  35.        
  36.         //定义一个方法让去掉字符串中重复的元素;
  37.         private static String singleCharacter(String str){
  38.                 //将字符串变成字符数组;
  39.                 char[] array = str.toCharArray();
  40.                 StringBuffer sb = new StringBuffer();
  41.                 //定义一个TreeSet集合,字符数组中的元素存入到集合中;以便去掉重复元素;
  42.                 Set<Character> ts = new TreeSet<Character>();
  43.                 for(int i=0; i<array.length; i++){
  44.                         ts.add(array[i]);
  45.                 }
  46.                 for(char c: ts){
  47.                         sb.append(c);
  48.                 }
  49.                 //将得到的符变成字符串返回;
  50.                 return sb.toString();
  51.                
  52.         }
  53. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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