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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© opo110 中级黑马   /  2016-3-3 19:56  /  948 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)

6 个回复

倒序浏览
思路:把字符串转换成字符数组,遍历字符数组,把字符存到map集合中去 如果map里存在这个字符 则取出key加1 如果没有的话 key就存字符 value就存1 然后遍历map并打印
  1. String s = "aababcabcdabcde";
  2.                
  3.                 char[] arr = s.toCharArray();
  4.                
  5.                 HashMap<Character, Integer> hm = new HashMap<>();
  6.                
  7.                 for(char c : arr){
  8.                         if(hm.containsKey(c))
  9.                                 hm.put(c, hm.put(c, hm.get(c))+1);
  10.                         else
  11.                                 hm.put(c, 1);
  12.                 }
  13.                
  14.                 for(Map.Entry<Character, Integer> me : hm.entrySet()){
  15.                         System.out.println(me.getKey()+"("+me.getValue()+")");
  16.                 }
复制代码

评分

参与人数 2黑马币 +2 收起 理由
洋葱头头 + 1 很给力!
opo110 + 1 很给力!

查看全部评分

回复 使用道具 举报
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class StringDemo {
        public static void main(String[] args) {
                String s = "aababcabcdabcde";
                //声明map集合:依据Map集合的键唯一,值覆盖特点
                Map <Character,Integer> map = new HashMap<>();
               
                for (int i = 0; i < s.length(); i++) {
                        //获取每个索引处的字节
                        char charAt = s.charAt(i);
                        //判断Map集合是否存在此元素
                        if (map.containsKey(charAt)){
                        //有的情况下根据键取出值+1,在存回到map集合
                                map.put(charAt, map.get(charAt)+1);
                        }else{
                                //没有就存入
                                map.put(charAt, 1);
                        }
                }
                //遍历map集合输出
                Set<Entry<Character, Integer>> entrySet = map.entrySet();
                for (Entry<Character, Integer> entry : entrySet) {
                         System.out.println(entry.getKey()+"出现了:"+entry.getValue()+"次");
                }
        }
}
回复 使用道具 举报
String line = "abcdekka27qoq";                 char[] arr = line.toCharArray();                 HashMap<Character, Integer> hm = new HashMap<>();                 for (char c : arr) {                         hm.put(c, hm.containsKey(c) ? hm.get(c) + 1 : 1);                 }                 for (Character key : hm.keySet()){                         System.out.print(key + "(" +hm.get(key) + ")");                 }
回复 使用道具 举报
执剑人 发表于 2016-3-4 18:44
String line = "abcdekka27qoq";                 char[] arr = line.toCharArray();                 HashMap hm = new HashMap();                 fo ...

求解,多次调用同意个方法会不会效率太低?
回复 使用道具 举报
xushao 发表于 2016-3-5 11:27
求解,多次调用同意个方法会不会效率太低?

都是需要遍历的,效率没有影响的!
回复 使用道具 举报
public static void main(String[] args) {
        String str="aababcabcdabcde";             //原字符串
        char[] tempstr=new char[26];                //用于记录原字符串中出现的字符
        for (int i = 0; i < tempstr.length; i++) {  //初始化为字符0
            tempstr='0';
        }
        int[] tempint=new int[26];                     //用于记录原字符串中出现的字符次数
        for(int i=0;i<str.length();i++){
            char item=str.charAt(i);                      //获取原字符串各个索引上的字符
            boolean flag=true;                            //设置一个标志,反应原字符串中是否出现了字符数组中未出现的字符
            for (int j = 0; j < tempstr.length; j++) {
                if(tempstr[j]=='0'){                        //遍历字符数组中非字符0元素
                    break;
                }
                if(tempstr[j]==item){                  
                    tempint[j]++;
                    flag=false;                                 //表示此轮循环没有出现新的字符,标志置否
                }
            }
            if(flag==true){                                 //每轮小循环结束,判断是否出现了新的字符
                for (int j = 0; j < tempstr.length; j++) {
                    if(tempstr[j]=='0'){
                        tempstr[j]=item;
                        tempint[j]=1;
                        break;
                    }
                }
            }
        }
        for (int i = 0; i < tempint.length; i++) {//打印信息
            if(tempint==0)
                break;
            System.out.print(tempstr+"("+tempint+")");
        }
    }

这题本来是想到用楼上的思路,用map的那一套。但是因为强迫症的关系,硬是不用那一套写了这段代码。希望能帮到楼主。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马