毕老师第16天视频里说了个 练习:
"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。
这个输出时按字母顺序排序的,那如果我想让它按次数从小到大排序该怎么弄?
是不是要重新写一个比较器? 那比较器怎么穿进去呢? 我写了个代码,不知道对不对,主要是不知道怎么传比较器。请大家帮忙- import java.util.*;
- class CharComparator implements Comparator< Map.Entry<Character,Integer>>
- {
- public int compare(Map.Entry<Character,Integer> c1,Map.Entry<Character,Integer> c2)
- {
- int num = c1.getValue().compareTo(c2.getValue());
-
- return num;
- }
- }
- class Demo7
- {
- public static void main(String[] args)
- {
- String s= charCount("ak+abAf1c,dCkaAbc-defa");
- System.out.println(s);
- }
- //字符统计方法
- public static String charCount(String str)
- {
- char[] chs = str.toCharArray();
- TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();// 定义一个字符与数字对应的集合
-
- int count = 0;//计数器
- for(int x=0; x<chs.length; x++)
- {
- if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))
- continue;
- Integer value = tm.get(chs[x]);
- if(value!=null)
- count = value;
- count++;
- tm.put(chs[x],count);//直接往集合中存储字符和数字,自动装箱。
- count = 0;//计数器置0
-
- }
- StringBuilder sb = new StringBuilder();//定义一个字符串缓冲区,用于存放集合中的内容
- Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
-
- Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
- while(it.hasNext())
- {
- Map.Entry<Character,Integer> me = it.next();
- Character ch = me.getKey();
- Integer value = me.getValue();
- sb.append(ch+":"+value+",");
- }
- return sb.toString();
- }
- }
复制代码 |