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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张丽 中级黑马   /  2012-10-8 09:11  /  2646 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义一个字符串"lsjif___siieaase__awiup__cbsk"按照这样的格式获取字符串中元素出现的的个数。字母(数字),字母(数字).......

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
使用正则表达式!
回复 使用道具 举报
  1. package day16;

  2. import java.util.*;

  3. class MapTest {
  4.         public static void main(String[] args)
  5.         {
  6.                 String str = "sdfgzxc=a&va+sdfxcvdf";
  7.                 String s = charCount(str);
  8.                 System.out.println(s);
  9.         }

  10.         public static String charCount(String str)
  11.         {
  12.                 char[] chs = str.toCharArray();
  13.                 TreeMap<Character, Integer> tm =new TreeMap<Character,Integer>();
  14.                
  15.                 for(int x = 0;x<chs.length;x++)
  16.                 {
  17.                         int count = 0;
  18.                         if(!(chs[x]>='a'&&chs[x]<='z'||chs[x]>='A'&&chs[x]<='Z'))//判断只记录字母
  19.                                 continue;
  20.                         Integer value = tm.get(chs[x]);
  21.                         if(value!=null)
  22.                                 count = value;
  23.                         count++;
  24.                         tm.put(chs[x],count);
  25.                        
  26.                 }
  27.                 StringBuilder sb =new StringBuilder();
  28.                 Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
  29.                 Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
  30.                 while(it.hasNext())
  31.                 {
  32.                         Map.Entry<Character,Integer> me =it.next();
  33.                         Character ch = me.getKey();
  34.                         Integer value = me.getValue();
  35.                         sb.append(ch+"("+value+")");
  36.                 }
  37.                 return sb.toString();
  38.         }

  39. }
复制代码
我用Map集合写的,你看看吧

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                 String string = "lsjif___siieaase__awiup__cbsk";
  3.                 string = string.replaceAll("[^a-zA-Z]", "");
  4.                 System.out.println(string);
  5.                 Map<Character, Integer> map = new TreeMap<>(new Comparator<Character>() {
  6.                         @Override
  7.                         public int compare(Character o1, Character o2) {
  8.                                 return o1 - o2;
  9.                         }
  10.                 });
  11.                 for (char c : string.toCharArray()) {
  12.                         Integer i = map.get(c);
  13.                         map.put(c, i == null || i == 0 ? 1 : ++i);
  14.                 }
  15.                 Set<Map.Entry<Character, Integer>> set = map.entrySet();
  16.                 Iterator<Map.Entry<Character, Integer>> iterator = set.iterator();
  17.                 while (iterator.hasNext()) {
  18.                         Entry<Character, Integer> e = iterator.next();
  19.                         System.out.println(e.getKey() + "(" + e.getValue() + ")");
  20.                 }
  21.         }
复制代码
简单实现了一下

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. public class GetCharNumber {
  2.         public static void main(String[] args) {
  3.                 String string="lsjif___siieaase__awiup__cbsk";
  4.                 int l=string.length();
  5.                 HashMap map =new HashMap();
  6.                
  7.                 //取出字符串中所有字符 , 将数量存到  map 中
  8.                 for(int i=0;i<l;i++){
  9.                         String s=string.substring(i, i+1);
  10.                         Integer value =(Integer)map.get(s);
  11.                         if(value==null){
  12.                                 map.put(s, 1);
  13.                         }else{
  14.                                 map.put(s, value+1);
  15.                         }
  16.                 }
  17.                
  18.                 //获取字符数量
  19.                 Set set=map.keySet();
  20.                 Iterator<String> it=set.iterator();
  21.                 while(it.hasNext()){
  22.                         String key=it.next();
  23.                         System.out.print(key+"("+map.get(key)+"),");
  24.                 }
  25.         }

  26. }
复制代码
运行结果:f(1),e(2),b(1),c(1),a(3),l(1),j(1),k(1),i(4),w(1),u(1),s(4),p(1),_(7),

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
发现楼上那位代码更精练
回复 使用道具 举报
public class GetCharNumber {

        public static void main(String[] args) {

               String string="lsjif___siieaase__awiup__cbsk";

                int len=string.length();

                HashMap map =new HashMap();
                //取出字符串中所有字符 , 将数量存到  map 中

                for(int i=0;i<len;i++){

                        String s=string.substring(i, i+1);

                        Integer value =(Integer)map.get(s);

                       if(value==null){

                               map.put(s, 1);

                    }else{

                             map.put(s, value+1);

                    }

              }
             //获取字符数量

            Set set=map.keySet();

            Iterator<String> it=set.iterator();

             while(it.hasNext()){

                     String key=it.next();

                      System.out.print(key+"("+map.get(key)+"),");
             }

      }
}
回复 使用道具 举报
我用的方法可能和你们的不太一样。
//定义一个字符串
            String str = "lsjif___siieaase__awiup__cbsk";
            //定义一个HashMap变量
            HashMap<String,Integer> map = new HashMap<String,Integer>();
            for(int i=0;i<str.length();i++){
                    //取得当前位置的字母.
                    String subString = str.substring(i,i+1);
                    //当map中key没有此位置的字母时,填充进去key为字母value为数字
                    if(!map.containsKey(subString)){
                            //取得字母出现的次数
                        String[] sum = str.split(subString);
                            map.put(subString, (Integer)(sum.length-1));
                    }
            }
            //输出HashMap的值
            Set set = map.entrySet();
            Iterator it = set.iterator();
            while(it.hasNext()){
                    Map.Entry<String, Integer> mp = (Entry<String, Integer>) it.next();
                    System.out.println(mp.getKey()+"("+mp.getValue()+")");
            }
回复 使用道具 举报
和我的思路一样的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马