# 字符重排和统计
题目
给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前。
##Java 代码实现
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args){
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
String str ;
while((str=br.readLine())!=null){
//读取字符串,字符串转换为字符数组
int len = str.length();
char[] ch = new char[len];
for(int i = 0;i<len;i++){
ch[i]=str.charAt(i);
}
LinkedHashMap<Character,Integer> map = new LinkedHashMap<>();
Arrays.sort(ch); // 对字符串中的字母进行排序
char[] ch2=new char[len];
/*for (int i = 0;i<len;i++){
System.out.print(ch[i]+" ");
}*/
int index = 0;
for(int i=0;i<len;i++){
if(ch[i]>=97&&ch[i]<=125){ //先输出小写字母,找到第一个小写字母的坐标
index = i;
break;
}
}
for(int i=index;i<len;i++){ //小写字母字在前
ch2[i-index]=ch[i];
}
for(int i=0;i<index;i++){ //大写字母字在后
ch2[i+len-index]=ch[i];
}
//System.out.println("\n"); //验证是否翻转大小写
// for (int i = 0;i<len;i++){
// System.out.print(ch2[i]+" ");
// }
//利用map,统计每种字符出现的次数
for(int i =0;i<len;i++){
if(map.containsKey(ch2[i])){
map.put(ch2[i],map.get(ch2[i])+1);
}else{
map.put(ch2[i],1);
}
}
for(Character key:map.keySet()){
System.out.print(key+":"+map.get(key)+";");
}
}
}
}
// 单独输出键值和单独输出value部分 这个部分和本题无直接关系
System.out.print("\n");
char[] ch3 = new char[map.size()];
for (Character s : map.keySet()) {
System.out.print(s+":");
}
System.out.printf("\n");
int[] geshu = new int[map.size()];
for (Integer num : map.values()) {
System.out.print(num+";");
}*/