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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq",输出格式为:a(2)b(1)k(2)...

3 个回复

正序浏览
package org.pie.audition;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Test01_统计字母出现次数 {

        /**
         * 1.取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq",输出格式为:a(2)b(1)k(2)...
         */
        public static void main(String[] args) {
                String str = new Scanner(System.in).nextLine();
                char[] ch = str.toCharArray();
                HashMap<Character, Integer> hs  =new HashMap<>();
                ArrayList<Character> al = new ArrayList<>();
                for (int i = 0; i < ch.length; i++) {
                        if(! hs.containsKey(ch[i])) {
                                hs.put(ch[i], 1);
                                al.add(ch[i]);
                        }else {
                                hs.put(ch[i], hs.get(ch[i]) + 1);                               
                        }
                }
                for (Character c : hs.keySet()) {
                        System.out.print(c + "(" + hs.get(c) + ")");
                }
/*                char[] ch = new char[26];
                int[]  arr = new int[26];
                for (int i = 0; i < ch.length; i++) {                                                                                        //初始化1-26,a-z
                        ch[i] = (char)('a'+i);
                        arr[i] = 0;
                }
                for (int i = 0; i < ch.length; i++) {                                                                                        //万能的替换法,可以不用arr数组
                        String str0 = str.replace(""+ ch[i],"");
                        if(str0.length()!=str.length()) {
                                System.out.print(ch[i]+"("+(str.length()-str0.length())+")");
                        }
                }*/
/*                for (int i = 0; i < str.length(); i++) {                                                                                //分析每个字符(传统)
                        for (int j = 0; j < ch.length; j++) {
                                if(str.charAt(i) == ch[j]) {
                                        arr[j]++;
                                        break;
                                }
                        }
                }
                for (int i = 0; i < arr.length; i++) {
                        if(arr[i] != 0) {
                                System.out.print(ch[i] + "(" + arr[i] + ")");
                        }
                }*/
        }

}
回复 使用道具 举报
1,将字符串转化为字符数组 2,利用Arrays工具类对字符数组排序 3,将排序完的字符数组遍历装当map集合中,键为字符,值为出现的次数思路大概这样,希望能帮到你
回复 使用道具 举报
使用TreeMap   然后就判断   如果集合里已经有了这个键,值就在原来的基础上加1,如果没有,就设置值为1。    最后按特定的格式用StringBuider来加!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马