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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//10、取出一个字符串中字母出现的次数。如:字符串
//:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...
//
//*char charAt(int index)               
//获取指定索引处出现的字符

public class Stringquchu {
        public static void main(String[] args){
                String str = "abcdekka27qoq";
                System.out.print(str.charAt(0));
                System.out.print("(2)");
                System.out.print(str.charAt(1));
                System.out.print("(3)");
                System.out.print(str.charAt(2));
                System.out.print("(2)");

                }
               
        }


14 个回复

倒序浏览
你这样做肯定不对啊,我和你说下思路吧:
A:将字符串转换为字符数组
B:创建map集合对象,character做键,Integer做值
C:拿字符去map中找对应的值,看返回的是否是null
           是:就储存,并把值记为1
           否:储存并把值++
D:将字符数组转换为字符串(StringBuffer)
回复 使用道具 举报
还是写一下代码吧,这个题不难,但是很重要
public class Test {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串:");
                String str = sc.nextLine();
                char[] ch = str.toCharArray();// 转换成字符数组
                TreeMap<Character, Integer> map = new TreeMap<>();// 创建一个TreeMap
                for (char c : ch) {// 遍历
                        Character key = c;
                        Integer value = map.get(c);
                        if (value == null) {// 判断,如果值为空,则向集合中添加(key,1),如果不为空则添加                     (key,value+1)
                                map.put(key, 1);
                        } else {
                                map.put(key, value + 1);
                        }
                }
                // 遍历集合
                Set<Map.Entry<Character, Integer>> set = map.entrySet();
                Iterator<Entry<Character, Integer>> it = set.iterator();
                while (it.hasNext()) {
                        Map.Entry<Character, Integer> me = it.next();
                        Character key = me.getKey();
                        Integer value = me.getValue();
                        System.out.println(key + "(" + value + ")");// 按规定的格式输出
                }
        }
}
还有一种Stringbuffer的append()方法,你自己做吧
回复 使用道具 举报 2 0
cemabenteng 发表于 2015-8-7 19:22
还是写一下代码吧,这个题不难,但是很重要
public class Test {
        public static void main(String[] args) { ...

为何我运行了说22行找不到符号呢?
回复 使用道具 举报
最简单的方法就是用Map集合做,
  1. public static void main(String[] args) {

  2. String str="abcdekka27qoq";

  3. TreeMap<Character,Integer> mp=new TreeMap<Character ,Integer>();
  4. char[] s=str.toCharArray();
  5. for(int i=0;i<s.length;i++){
  6. if(s[i]<'a'||s[i]>'z'){
  7. continue;
  8. }
  9. if(mp.containsKey(s[i])){
  10. mp.put(s[i],mp.get(s[i])+1 );
  11. }
  12. else{
  13. mp.put(s[i], 1);
  14. }
  15. }

  16. StringBuffer sb=new StringBuffer();
  17. Set<Character> st=mp.keySet();
  18. Iterator<Character> it=st.iterator();
  19. while(it.hasNext()){
  20. char c=it.next();
  21. int num=mp.get(c);
  22. sb.append(c+"("+num+")");
  23. }
  24. System.out.println(sb.toString());
复制代码

回复 使用道具 举报
我是来看回复的,
回复 使用道具 举报
godboy001 发表于 2015-8-7 19:46
为何我运行了说22行找不到符号呢?

可能有点小错误吧,我写完了就粘过来了,思路就是这样,你按着思路自己做一次
回复 使用道具 举报
cemabenteng 发表于 2015-8-7 22:34
可能有点小错误吧,我写完了就粘过来了,思路就是这样,你按着思路自己做一次 ...

告诉你一下学习的方法啊,不管什么题先去想思路,代码只是思路的体现,以后就业班点招或者公司面试都是思路很重要,代码永远敲不完,拿到一道题先把思路写出来,一定要写思路和注释,养成好习惯对你很有帮助
回复 使用道具 举报
cemabenteng 发表于 2015-8-7 22:36
告诉你一下学习的方法啊,不管什么题先去想思路,代码只是思路的体现,以后就业班点招或者公司面试都是思路 ...

主要我还太菜,得读程序看思路,尽量看能跑的程序,不然回头也不知道哪里出了问题
回复 使用道具 举报
哎,菜鸟遇到的问题总是很奇葩,没办法,基础差跑程序都跑不对........
回复 使用道具 举报
godboy001 发表于 2015-8-8 07:52
主要我还太菜,得读程序看思路,尽量看能跑的程序,不然回头也不知道哪里出了问题 ...

思路比代码重要的多, 实在不行就背思路
回复 使用道具 举报
cemabenteng 发表于 2015-8-8 20:52
思路比代码重要的多, 实在不行就背思路

恩,有道理
回复 使用道具 举报
package com.itheima;

import java.util.Scanner;

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

        public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                String s = in.nextLine();
                char[] a = s.toCharArray();
                int[] b = new int[60];
                for(int i=0; i<a.length; i++) {
                        if(a[i] >= 'a' && a[i] <= 'z') {//计算小写字母的个数
                                b[a[i]-'a']++;
                        }
                        else if(a[i] >= 'A' && a[i] <= 'Z') {//计算大写字母的个数
                                b[a[i]-'A'+30]++;
                        }
                }
                for(int i=0; i<b.length; i++) {
                        if(b[i] == 0)
                                continue;
                        if(i < 30) {//输出小写字母的个数
                                System.out.print((char)('a'+i) + "(" + b[i] + ")");
                        } else {//输出大写字母的个数
                                System.out.print((char)('A'+i-30) + "(" + b[i] + ")");
                        }
                }
                System.out.println();
        }

}
回复 使用道具 举报
cemabenteng 发表于 2015-8-7 22:36
告诉你一下学习的方法啊,不管什么题先去想思路,代码只是思路的体现,以后就业班点招或者公司面试都是思路 ...

受教了,多谢!
回复 使用道具 举报
public static void main(String[] args) {
                String s = "abcdekka27qoq";
                char[] arr = s.toCharArray();
                TreeMap<Character, Integer> tm = new TreeMap<>();
                for (char c : arr) {
                        if (c >= 'a' && c <= 'z') {
                                if (tm.containsKey(c)) {
                                        tm.put(c, tm.get(c) + 1);
                                }else {
                                        tm.put(c, 1);
                                }
                        }
                }
                for (Character c : tm.keySet()) {
                        System.out.print(c + "(" + tm.get(c) + ")" );
                }
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马