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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

7 个回复

倒序浏览
使用LinkedHashMap集合(键存字符,值存键的个数 )  ,   
遍历字符串取每个字符(用到charAt()方法) ,
遍历过程中判断集合的键中是否包含字符,如果包含     存键,值+1   如果不存在   存键   值为1
然后用StringBuilder 按格式遍历添加
回复 使用道具 举报
给个黑马币呗
  1. /**
  2. * 需求:统计输入的字符串,如 "abcaab"  以a(3)b(2)c(1)的形式输出
  3. * 分析:        1 字符与字符个数属于对应关系,可用Map<String,Integer>
  4. *                         2 输出字母是自然排序,所以考虑使用TreeMap
  5. */
  6. package fmi1;

  7. import java.util.Scanner;
  8. import java.util.Set;
  9. import java.util.TreeMap;

  10. public class CharacterCount {

  11.         public static void main(String[] args) {
  12.                 // TODO Auto-generated method stub
  13.                 //建立接收键盘输入的字符串
  14.                 System.out.println("请输入字符串:");
  15.                 String line = new Scanner(System.in).nextLine();
  16.                 //建立集合Map
  17.                 TreeMap<Character, Integer> tm = new TreeMap<Character,Integer>();
  18.                 //将输入字符串转成数组
  19.                 char[] chs = line.toCharArray();
  20.                 //遍历字符串,将字符存入集合Map,若字符key已存在,则value加1,否则,value = 1
  21.                 for(char ch:chs        ){
  22.                         //根据键获取集合的值,判断字符的个数
  23.                         Integer value = tm.get(ch);
  24.                         if(null == value){//没有对应键值对
  25.                                 value = 1;
  26.                         }
  27.                         else
  28.                                 value++;
  29.                         //将更新后的键值关系存至Map
  30.                         tm.put(ch, value);
  31.                 }
  32.                 //遍历Map,输出键值对
  33.                 StringBuilder sb = new StringBuilder("");
  34.                 Set<Character> s = tm.keySet();
  35.                 for(Character ch:s){
  36.                         sb.append(ch).append("(").append(tm.get(ch)).append(")");
  37.                 }
  38.                 System.out.println(sb.toString());
  39.         }
  40. }
复制代码
回复 使用道具 举报
import java.util.*;
public class MapDemo{
        public static void main(String[] args){
                //定义一个字符串
                String s = "cbxzbvavdvgd";
                //转为字符数组
                Char[] ch = s.toCharArray();
                //定义一个Map集合
                Map<Character,Integer> map = new TreeMap<Character,Integer>();
                //遍历字符数组
                for(char c : ch){
                        //判断字符是否在集合中
                        if(map.containsKey(c)){
                                map.put(c,map.get(c)+1);
                        }else{
                                map.put(c,1);
                        }
                }
               
                //遍历集合
                Set<Character> set = map.keySet();
               
                //定义一个StringBulider类
                StringBulider sb = new StringBuilder();
               
                for(Character cha : set){
                        //通过键获取值
                        Integer i = map.get(cha);
                        sb.append(cha).append("("+i+")");
                }
                System.out.println(sb);
        }
}
回复 使用道具 举报
赞一个!
回复 使用道具 举报
import java.util.Arrays; import java.util.HashMap; import java.util.TreeMap;   public class Test1 {          /**          * @param args          * *Test1--取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq",输出格式为:a(2)b(1)k(2)...          */         public static void main(String[] args) {                 String s = "abcdekka27qoq";                 //定义一个被统计的字符串                 String regex = "\\d";                                 //用正则去掉数字                 String s1 = s.replaceAll(regex,"");  //abcdekkaqoq                                    char[] arr = s1.toCharArray();                        //把字符串转换为字符数组                  Arrays.sort(arr);                                    //把字符数组按照字典顺序排序                                   TreeMap<Character, Integer> hm = new TreeMap<>();     //定义双列集合,存储字符串中字符以及字符出现的次数                 //遍历字符数组获取每一个字符,并将字符存储在双列集合中                 for (char c : arr) {                                  //把字符数组存储在集合中,如果集合中包含这个键,就将值加1存储                         if (!hm.containsKey(c)) {                         //如果集合中不存在这个键,就将该字符当键,值为1存储                                 hm.put(c, 1);                         }else{                                 hm.put(c, hm.get(c) + 1);                         }                 }                 //打印双列集合获取字符出现的次数                 for (Character key : hm.keySet()) {                 //遍历集合中的所有键,hm.keySet()                         System.out.print(key + "("+ hm.get(key)+ ")");  //通过键获取值hm.get(key)                 }         } }
回复 使用道具 举报
32000个赞!!
回复 使用道具 举报
做的很好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马