对一篇英文短文进行统计排序(标点不考虑)。生成这样的结果: 整理出现的26(也可能不足26)个字母,根据字母出现的数量由多到少排序。若数量相同则按照字母表顺序列。 生成的结果大致为“ffffffffffffffffffffeeeeeeerrrrrrzzzzzzaaabbccu”。
1 public class Z 2 { 3 /** 4 * @对一篇英文短文进行统计排序(标点不考虑)。生成这样的结果: 5 * 整理出现的26(也可能不足26)个字母,根据字母出现的数量由多到少排序。 6 * 若数量相同则按照字母表顺序列出。 7 生成的结果大致为“ffffffffffffffffffffeeeeeeerrrrrrzzzzzzaaabbccu”。 8 */ 9 public static void main(String[] args) 10 { 11 String input = getRandomStr(10); 12 System.out.println(input); 13 System.out.println(operate("基本信息HR简历编号姓名(与身份证护照一致)性别M国籍个人成就 2014年以Android App获得“创青春”全国大学生创业大赛移动互联网创业专项赛银奖并申请获得软件著作权")); 14 } 15 public static String operate(String input) 16 { 17 int[] times = new int[26]; 18 char temp; 19 for (int i = 0;i<input.length();i++) 20 { 21 temp = filter(input.charAt(i)); 22 if('a'<= temp && temp <= 'z') 23 { 24 times[temp-'a']++; 25 } 26 } 27 StringBuilder res = new StringBuilder(); 28 int maxTimes = Integer.MAX_VALUE; 29 int minIndex = 25; 30 while(maxTimes != 0) 31 { 32 maxTimes = 0; 33 minIndex = 25; 34 for(int i = 0; i < times.length; i++) 35 { 36 if(times[i]==0) 37 continue; 38 if(times[i] > maxTimes) 39 { 40 maxTimes = times[i]; 41 minIndex = i; 42 } 43 } 44 for(int i = 0;i < maxTimes;i++) 45 { 46 res.append((char)('a'+minIndex)); 47 } 48 times[minIndex] = 0; 49 } 50 return res.toString(); 51 } 52 public static char filter(char a) 53 { 54 if('A'<=a&&a<='Z') 55 { 56 a+='a'-'A'; 57 } 58 return a; 59 } 60 /** 61 * @param N 62 * @产生长度为N的随机字母字符串 63 */ 64 public static String getRandomStr(int N) 65 { 66 StringBuilder res =new StringBuilder(); 67 for(int i= 0;i<N;i++) 68 { 69 char temp = (char) ('a'+Math.random()*26); 70 res.append(temp); 71 } 72 return res.toString(); 73 74 } 75 }