标题:字符统计及重排
【字符统计及重排】给出⼀个仅包含字⺟的字符串,不包含空格,统计字符串中各个字⺟(区分⼤⼩写)出现的次数,并按照字⺟出现次数从⼤到⼩的顺序输出各个
字⺟及其出现次数。如果次数相同,按照⾃然顺序进⾏排序,且⼩写字⺟在⼤写字⺟之前。
输⼊描述:
输⼊⼀⾏,为⼀个仅包含字⺟的字符串。
输出描述:
按照字⺟出现次数从⼤到⼩的顺序输出各个字⺟和字⺟次数,⽤英⽂分号分隔,注意末尾的分号;字⺟和次数间⽤英⽂冒号分隔。
示例1:
输入
xyxyXX
输出
x:2;y:2;X:2
import java.util.*;
public class T {
public static void main(String[] args) {
String s = "xxxxxcyyddABABABABCCCCC";
Map<Character,Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
if(!map.containsKey(s.charAt(i))){
map.put(s.charAt(i),1);
}else
map.put(s.charAt(i),map.get(s.charAt(i))+1);
}
List< Map.Entry<Character,Integer>> list = new ArrayList<>(map.entrySet());
System.out.println(list);
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> m1, Map.Entry<Character, Integer> m2) {
if( m1.getValue() == m2.getValue() ){
if((int) m1.getKey() > 97 && (int) m2.getKey() < 92){
return m2.getKey() - m1.getKey();
}
return m1.getKey()-m2.getKey();
}
return m2.getValue() - m1.getValue();
}
});
StringBuffer sb = new StringBuffer();
for (int i = 0; i < list.size()-1; i++) {
sb.append(list.get(i).getKey()).append(":").append(list.get(i).getValue()).append(";");
}
sb.append(list.get(list.size()-1).getKey()).append(":").append(list.get(list.size()-1).getValue());
System.out.println(sb.toString());
}
}
输出结果:
x:5;C:5;A:4;B:4;d:2;y:2;c:1