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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zippo 中级黑马   /  2014-8-2 21:52  /  1899 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

取出一个字符串中字母出现的次数。
如:字符串:"abcdekka27qoq" ,输出格式为:a(3)b(2)k(2)...
这里的输出格式是要按次数的大小来输出的。

13 个回复

倒序浏览
你去看下TreeMap集合  ,字母和次数是映射关系。TreeMap可以接收比较器。
回复 使用道具 举报
hejinzhong 发表于 2014-8-2 21:57
你去看下TreeMap集合  ,字母和次数是映射关系。TreeMap可以接收比较器。

是可以接受比较器,但是我存的是value,这个怎么比较。
回复 使用道具 举报
毕老师 视屏里面  讲的很详细  完全的一样
回复 使用道具 举报
杨庆雷 发表于 2014-8-2 22:04
毕老师 视屏里面  讲的很详细  完全的一样

但是这道题不完全一样,加了要求,还要把value的值按顺序大小排序。
回复 使用道具 举报
...........
回复 使用道具 举报
  1. public static void main(String[] args) {
  2.         String string = "abcdekka27qoq";
  3.        
  4.         HashMap<String, Integer> map = count(string);
  5.         System.out.println(map);
  6.        
  7.         TreeMap<String, Integer> treeMap = sortByValue(map);
  8.         System.out.println(treeMap);
  9. }

  10. private static HashMap<String, Integer> count(String string) {
  11.         String[] strings = string.split("");
  12.         HashMap<String, Integer> map = new HashMap<String, Integer>();
  13.         for (String s : strings) {
  14.                 map.put(s, map.containsKey(s)?map.get(s)+1:1);
  15.         }
  16.         return map;
  17. }

  18. private static TreeMap<String, Integer> sortByValue(
  19.                 final HashMap<String, Integer> map) {
  20.         TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>(
  21.                         new Comparator<String>() {
  22.                                 public int compare(String o1, String o2) {
  23.                                         Integer i1 = map.get(o1);
  24.                                         Integer i2 = map.get(o2);
  25.                                         if (!i1.equals(i2))
  26.                                                 return i2.compareTo(i1);
  27.                                         return o1.compareTo(o2);
  28.                                 }
  29.                         });
  30.         treeMap.putAll(map);
  31.         return treeMap;
  32. }
复制代码


回复了你另一个提问,你没理我…
回复 使用道具 举报 0 1
icris 发表于 2014-8-2 22:31
回复了你另一个提问,你没理我…

private static TreeMap<String, Integer> sortByValue(
        final HashMap<String, Integer> map) {
实参为什么也要用final修饰啊,搞不明白。
回复 使用道具 举报
zippo 发表于 2014-8-2 22:36
private static TreeMap sortByValue(
        final HashMap map) {
实参为什么也要用final修饰啊,搞不 ...

我加 final 是因为 Eclipse 让我加的…
内部类要用到,加 final 就可以直接用了,又没有什么坏处
回复 使用道具 举报
DSY 中级黑马 2014-8-3 02:28:42
10#
  1. package itheima;
  2. import java.util.*;

  3. class MyComparator implements Comparator              //定义比较器
  4. {
  5.         Map tr;
  6.         public MyComparator(Map map)
  7.         {
  8.                 this.tr=map;
  9.      }
  10.           public int compare(Object o1,Object o2)
  11.           {
  12.                           Character c1=(Character)o1;
  13.                           Character c2=(Character)o2;
  14.                     Integer i1=(Integer)tr.get(o1);
  15.                           Integer i2=(Integer)tr.get(o2);                  
  16.                           int num=i2.compareTo(i1);
  17.                           if(num==0)
  18.                                   return c1.compareTo(c2);
  19.                           return num;
  20.           }
  21. }
  22. public class Test1 {
  23.              public static void sop(Object obj)
  24.              {
  25.                 System.out.println(obj);
  26.              }
  27.              public static String filter(String str)   //定义过滤输入字符串的方法,去掉除字母外的字符,返回输入的字母字符串
  28.              {
  29.                      StringBuffer a = new StringBuffer();
  30.              char[] ch = str.toCharArray();
  31.              for(char c:ch)
  32.              {
  33.                     if(c>='a'&&c<='z')
  34.                      a.append(c);
  35.                     }
  36.              return a.toString();
  37.              }
  38.           public static void main(String[] args)
  39.           {
  40.                   Scanner scan = new Scanner(System.in);
  41.                   String input = scan.nextLine();
  42.               String str = filter(input);
  43.               sop(charCount(str));
  44.           }
  45.           public static String charCount(String st){
  46.                   char[] ch = st.toCharArray();
  47.                   StringBuffer sb = new StringBuffer();
  48.                   Map<Character,Integer> mp = new HashMap<Character,Integer>();
  49.                   for(char c:ch){
  50.                           Integer count = mp.get(c);
  51.                           if(count==null)
  52.                                   mp.put(c, 1);
  53.                           else{
  54.                                   count++;
  55.                                   mp.put(c, count);
  56.                           }
  57.                   }
  58.                   MyComparator myC=new MyComparator(mp);
  59.                   TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>(myC);
  60.                   tm.putAll(mp);
  61.      
  62.                   Set<Character> keyset = tm.keySet();                   //调用KeySet方法遍历集合tm
  63.                   Iterator<Character> it = keyset.iterator();
  64.               while(it.hasNext()){
  65.                       Character key = it.next();
  66.                       Integer value = tm.get(key);
  67.                       sb.append(key+"("+value+")");
  68.               }
  69.               return sb.toString();
  70.           }
  71. }
复制代码
回复 使用道具 举报 0 1
楼主这题 按值排序是你自己想的  还是 真的考到了  楼上全歪解
回复 使用道具 举报
唕 发表于 2014-8-3 09:10
楼主这题 按值排序是你自己想的  还是 真的考到了  楼上全歪解

自己想的
回复 使用道具 举报
这是视视频里有的啊
回复 使用道具 举报
小洁呵呵 发表于 2014-8-3 10:21
这是视视频里有的啊

加了要求的,要排序。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马