1. 首先我们看看统计字符串中每个字符出现的次数的案例图解:
2. 代码实现:
(1)需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
分析:
A: 定义一个字符串(可以改进为键盘录入)
B: 定义一个TreeMap集合
键: Character
值:Integer
C: 把字符串转换为字符数组
D: 遍历字符数组,得到每一个字符
E: 拿刚才得到的字符作为键到集合中去找值,看返回值
是null:说明该键不存在,就把该字符作为键,1作为值存储
不是null:说明该键存在,就把值加1,然后重写存储该键和值
F: 定义字符串缓冲区变量
G:遍历集合,得到键和值,进行按照要求拼接
H:把字符串缓冲区转换为字符串输出
录入:linqingxia
结果:result:a(1)g(1)i(3)l(1)n(2)q(1)x(1)
(2)代码实现:
1 package cn.itcast_05; 2 3 import java.util.Scanner; 4 import java.util.Set; 5 import java.util.TreeMap; 6 7 /* 8 * 需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1) 9 * 10 * 分析: 11 * A:定义一个字符串(可以改进为键盘录入) 12 * B:定义一个TreeMap集合 13 * 键:Character 14 * 值:Integer 15 * C:把字符串转换为字符数组 16 * D:遍历字符数组,得到每一个字符 17 * E:拿刚才得到的字符作为键到集合中去找值,看返回值 18 * 是null:说明该键不存在,就把该字符作为键,1作为值存储 19 * 不是null:说明该键存在,就把值加1,然后重写存储该键和值 20 * F:定义字符串缓冲区变量 21 * G:遍历集合,得到键和值,进行按照要求拼接 22 * H:把字符串缓冲区转换为字符串输出 23 * 24 * 录入:linqingxia 25 * 结果:result:a(1)g(1)i(3)l(1)n(2)q(1)x(1) 26 */ 27 public class TreeMapDemo { 28 public static void main(String[] args) { 29 // 定义一个字符串(可以改进为键盘录入) 30 Scanner sc = new Scanner(System.in); 31 System.out.println("请输入一个字符串:"); 32 String line = sc.nextLine(); 33 34 // 定义一个TreeMap集合 35 TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>(); 36 37 //把字符串转换为字符数组 38 char[] chs = line.toCharArray(); 39 40 //遍历字符数组,得到每一个字符 41 for(char ch : chs){ 42 //拿刚才得到的字符作为键到集合中去找值,看返回值 43 Integer i = tm.get(ch); 44 45 //是null:说明该键不存在,就把该字符作为键,1作为值存储 46 if(i == null){ 47 tm.put(ch, 1); 48 }else { 49 //不是null:说明该键存在,就把值加1,然后重写存储该键和值 50 i++; 51 tm.put(ch,i); 52 } 53 } 54 55 //定义字符串缓冲区变量 56 StringBuilder sb= new StringBuilder(); 57 58 //遍历集合,得到键和值,进行按照要求拼接 59 Set<Character> set = tm.keySet(); 60 for(Character key : set){ 61 Integer value = tm.get(key); 62 sb.append(key).append("(").append(value).append(")"); 63 } 64 65 //把字符串缓冲区转换为字符串输出 66 String result = sb.toString(); 67 System.out.println("result:"+result); 68 } 69 }
运行效果,如下: