码迷,mamicode.com
首页 > 其他好文 > 详细

【102】字符统计

时间:2017-10-18 16:44:29      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:err   ddc   void   一个   ext   sys   rar   code   set   

输入描述:

输入一串字符。

输出描述:

对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

示例1
输入
aadddccddc
输出
dca


思路:
1 首先按字符的ASCII码从小到大的排序的方式将字符存储到一个Map当中;
2 统计完字符对应的出现次数后,将map转化成List后,使用Collections.sort()的方式对Map的value值,即次数进行从大到小的排序;
3 输出;注意最后需要换行(反人类的测试用例)。
 
代码:
import java.util.*;
import java.util.Map.Entry;

public class Main {

    public static void getCount(String input){
        if(input == null || input.length() <= 0){
            return;
        }
        char[] arrs = input.toCharArray();
        //按字符的ASCII码排序,由小到大
        Comparator<Character> com1 = new Comparator<Character>(){
            @Override
            public int compare(Character o1, Character o2) {
                return o1.compareTo(o2);
            }
        };
        TreeMap<Character, Integer> map = new TreeMap<>(com1);
        for(int i = 0; i < arrs.length; i++){
            char c  = arrs[i];
            if(c == ‘ ‘
                    || c >= ‘0‘ && c <= ‘9‘ 
                    || c >= ‘a‘ && c <= ‘z‘
                    || c >= ‘A‘ && c <= ‘Z‘){
                map.put(c, (map.get(c) == null ? 0 : map.get(c) ) + 1);
            }
        }
        
        ArrayList<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
        //按字符出现的次数排序,由大到小
        Comparator<Map.Entry<Character, Integer>> com2 = new Comparator<Map.Entry<Character, Integer>>(){
            @Override
            public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        };
        Collections.sort(list, com2);
        for(int i = 0; i < list.size(); i++){
            System.out.print(list.get(i).getKey());
        }
        System.out.println();
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String input = sc.next();
            getCount(input);
        }
        
    }
}

 

这里有几个注意的点:

1 有两个排序时,如字符,次数都需要排序时,先在添加时对字符排序;

 2 Map使用Comaparator时只能对key进行排序;

   要对其value进行排序,就需要转换成List。

3 Map转换成List:ArrayList<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());

   Collections.sort(list, com2);













【102】字符统计

标签:err   ddc   void   一个   ext   sys   rar   code   set   

原文地址:http://www.cnblogs.com/nomico271/p/7687387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!