黑马程序员技术交流社区

标题: 入学测试的一道题,求大神帮忙解决。 [打印本页]

作者: zippo    时间: 2014-8-2 21:52
标题: 入学测试的一道题,求大神帮忙解决。
取出一个字符串中字母出现的次数。
如:字符串:"abcdekka27qoq" ,输出格式为:a(3)b(2)k(2)...
这里的输出格式是要按次数的大小来输出的。


作者: hejinzhong    时间: 2014-8-2 21:57
你去看下TreeMap集合  ,字母和次数是映射关系。TreeMap可以接收比较器。
作者: zippo    时间: 2014-8-2 22:01
hejinzhong 发表于 2014-8-2 21:57
你去看下TreeMap集合  ,字母和次数是映射关系。TreeMap可以接收比较器。

是可以接受比较器,但是我存的是value,这个怎么比较。
作者: 杨庆雷    时间: 2014-8-2 22:04
毕老师 视屏里面  讲的很详细  完全的一样
作者: zippo    时间: 2014-8-2 22:06
杨庆雷 发表于 2014-8-2 22:04
毕老师 视屏里面  讲的很详细  完全的一样

但是这道题不完全一样,加了要求,还要把value的值按顺序大小排序。
作者: @for    时间: 2014-8-2 22:22
...........
作者: icris    时间: 2014-8-2 22:31
  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. }
复制代码


回复了你另一个提问,你没理我…
作者: zippo    时间: 2014-8-2 22:36
icris 发表于 2014-8-2 22:31
回复了你另一个提问,你没理我…

private static TreeMap<String, Integer> sortByValue(
        final HashMap<String, Integer> map) {
实参为什么也要用final修饰啊,搞不明白。
作者: icris    时间: 2014-8-2 22:40
zippo 发表于 2014-8-2 22:36
private static TreeMap sortByValue(
        final HashMap map) {
实参为什么也要用final修饰啊,搞不 ...

我加 final 是因为 Eclipse 让我加的…
内部类要用到,加 final 就可以直接用了,又没有什么坏处
作者: DSY    时间: 2014-8-3 02:28
  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. }
复制代码

作者: 唕    时间: 2014-8-3 09:10
楼主这题 按值排序是你自己想的  还是 真的考到了  楼上全歪解
作者: zippo    时间: 2014-8-3 09:24
唕 发表于 2014-8-3 09:10
楼主这题 按值排序是你自己想的  还是 真的考到了  楼上全歪解

自己想的
作者: 小洁呵呵    时间: 2014-8-3 10:21
这是视视频里有的啊
作者: zippo    时间: 2014-8-3 10:38
小洁呵呵 发表于 2014-8-3 10:21
这是视视频里有的啊

加了要求的,要排序。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2