- package lwj2;
- import java.util.Iterator;
- import java.util.Set;
- import java.util.TreeMap;
- /*
- * 需求:判读"askhdfashdfdvkloiweoibnxcvzfashdfk"字符串中每个字母出现的次数,并排序按照一下格式输出
- * a[3]d[3]f[4]...
- *
- * 分析:
- * A:需要排序,所以我们采用TreeMap集合存储,并排序
- * B:怎么存储并计算每个字符出现的次数的?
- * a:定义TreeMap集合:TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
- * b:定义count变量,来计算每个字符出现的次数
- * c:将字符串转化为字符数组,遍历该数组,获取每一个字符,将该字符存进TreeMap集合中
- * 使用get方法判断返回值:
- * 如果返回值为null:表示集合里没有这个key,将该字符作为key,1作为value存进集合
- * 如果返回值不为null:表示集合里已经有这个key,获取该key下的值,并将value++,并将该字符作为key,value++存进集合
- * d:将该集合转化为指定输出格式的字符串
- * 创建StringBuilder对象
- * 遍历该集合
- * 使用StringBuilder对象对集合数据进行拼接操作
- *
- * a,2
- * b,4
- * f,5
- * t,9
- *
- *
- *
- */
- public class TreeMapDemo {
- public static void main(String[] args) {
- // 指定需要操作的字符串
- String s = "askhdfashdfdvkloiweoibnxcvzfashdfk";
- // 定义TreeMap集合
- TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
- // 定义count变量,来计算每个字符出现的次数
- int count = 0;
- // 将字符串转化为字符数组
- char chs[] = s.toCharArray();
- // 遍历该数组,获取每一个字符,将该字符存进TreeMap集合中
- for (char ch : chs) {
- if (tm.get(ch) != null) {
- // 表示集合里已经有这个key,获取该key下的值,并将value++,并以ch和value++再次存入集合中
- Integer i = tm.get(ch);
- // 并将value++
- i++;
- // 并以ch和value++再次存入集合中
- tm.put(ch, i);
- } else {
- // 表示该ch字符之前出现在集合中,将该值存进集合
- tm.put(ch, 1);
- }
- }
- // 创建StringBuilder对象
- StringBuilder sb = new StringBuilder();
- sb.append("{");
- // 遍历该集合
- Set<Character> set = tm.keySet();
- for (Iterator<Character> it = set.iterator(); it.hasNext();) {
- Character ch = it.next();
- Integer i = tm.get(ch);
- sb.append(ch).append(" = ").append(i).append(",");
- }
- sb.append("}");
- // for (Character ch : set) {
- // Integer i = tm.get(ch);
- // if (set.size() == 0) {
- // sb.append(ch).append("[").append(i).append("]").append(",");
- // }
- // }
- System.out.println(sb.toString());
- }
- }
复制代码
|