标签:err ddc void 一个 ext sys rar code set
输入一串字符。
对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
aadddccddc
dca
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);
标签:err ddc void 一个 ext sys rar code set
原文地址:http://www.cnblogs.com/nomico271/p/7687387.html