102字符统计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了102字符统计相关的知识,希望对你有一定的参考价值。
输入描述:
输入一串字符。
输出描述:
对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照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字符统计的主要内容,如果未能解决你的问题,请参考以下文章