黑马程序员技术交流社区

标题: 取出一个字符串中字母出现的次数 [打印本页]

作者: 871165471@qq.co    时间: 2015-5-31 16:44
标题: 取出一个字符串中字母出现的次数
/*
* 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,
* 输出格式为:a(2)b(1)k(2)...
*
* 思路;将重复的字母和数字去掉形成新的字符串,将新的字符串按每一个字母为一个字符去和原字符串
* 进行比较,
*
*
*/

请问有什么不妥?

package com.itheima;

import java.util.LinkedHashSet;

class Test1{

        public static int getCount(String str,int chr){//利用2个字符串间的关系得出重复的数
                int count=0;
                int index=0;
           //
                        while((index=str.indexOf(chr,index))!=-1){
                                index=index+1;//针对单个字符串的
                                count++;//计数器
                        }
                 return count;

        }
       
        public static void main(String[] args) {
                String str = "abcdekka27qoq";//字符串
                char[] buf = str.toCharArray();//转成字符数组
               
                LinkedHashSet<Character> set=new LinkedHashSet<Character>();
                for(Character chr:buf){
                        set.add(chr); //利用集合特性去除重复字符元素 按原字符串的字幕出现先后
                }
                Character [] arr=set.toArray(new Character[0]);//集合转成字符数组
          

                 for (int i = 0; i < arr.length; i++) {
                         
                         if (arr[i]>= 'a' &&  arr[i]<= 'z' || arr[i] >= 'A' && arr[i] <= 'Z') {//判断是够是字母,将其它排除
                         
                               System.out.print( arr[i]+"("+getCount(str, arr[i])+")");//按要求输出结果
                         
                        }
    }
                 
                       
                       
                       
                 }
                 
                 
}


作者: tanzhixue    时间: 2015-5-31 18:00
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class StringTest {
public static void main(String[] args) {
                        String s="abcdefabced";
                        char[] ch=s.toCharArray();
                        TreeMap<Character,Integer> hm = new TreeMap<Character,Integer>();
                       
                        for(int x=0;x<ch.length;x++)
                        {
                                Character c=ch[x];
                                Integer value=hm.get(c);
                                if(value!=null)
                                {
                                   //键相同 那么把值+1就ok
                                        value=value+1;
                                        hm.put( c,value);
                                       
                                }
                                else
                                {//如果为空值就存1
                                        hm.put(c, 1);
                                }
                        }
                                Set<Map.Entry<Character, Integer>> set = hm.entrySet();
                                Iterator<Map.Entry<Character, Integer>> it = set.iterator();
                                while (it.hasNext()) {
                                        Map.Entry<Character, Integer> me = it.next();
                                        Character key = me.getKey();//键
                                        Integer valu = me.getValue();//值得取出
                                        System.out.print(key + "(" + valu + ")");// 按规定的格式输出
                                }
                               
                        }
}

作者: 马也keyboard    时间: 2015-5-31 18:07
学习一下

作者: Lucus    时间: 2015-5-31 21:48
学习了,感谢分享
作者: Amu    时间: 2015-5-31 21:52
1楼的思路很好,利用TreeMap集合存储字符和对应字符串出现的次数,然后取出Map中的元素,用StringBuileder类连接
作者: 追忆似水年华    时间: 2015-5-31 23:01
不错学习了。
作者: 黯然残影    时间: 2015-6-1 00:00
写的不错,加油




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