题目
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计,按照统计个数由多到少输出,如果统计的个数相同,则按照ASCII码由小到大排序输出。如果有其他字符,则对这些字符不用进行统计。
代码
public List<Map.Entry<Character, Integer>> CharacterCount(String s){
HashMap<Character,Integer> hashMap = new HashMap();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (( c >= 'A' && c <= 'Z' ) || (c >= 'a' && c <= 'z') || ( c >= '0' && c <= '9' ) || c ==' '){
if (hashMap.containsKey(c)){
hashMap.put(c, hashMap.get(c)+1);
}else{
hashMap.put(c, 1);
}
}
}
List<Map.Entry<Character, Integer>> list = new ArrayList(hashMap.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
//重写排序规则,按照map对象的value从大到小排序,如果value相等,则按照key的ASCII从小到大排序
int i = o2.getValue() - o1.getValue();
if (i==0){
i = Integer.valueOf(o1.getKey()) - Integer.valueOf(o2.getKey());
}
return i;
}
});
return list;
}
结果如图所示
PS:该代码未在华为机试平台运行,仅供参考!!!