写得比较复杂:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
//单词分析:
import java.util.Scanner;
import java.util.Set;
public class dataa1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String[] arr = new String[str.length()];//存放字母
int sum = 1;//计数:字符串中每个字母出现的次数
Map<String, Integer> map = new HashMap<String, Integer>();
//哈希表存储字母及其出现的次数:K(String):字母 V(Integer):出现次数
for(int i=0;i<str.length();i++) {//循环截取字符串放入数组中
arr[i]=str.substring(i, i+1);
}
for(int i=0;i<str.length();i++) {//判断数组中元素是否相等
for(int j=i+1;j<str.length();j++) {
if(arr[i].equals(arr[j])) {
sum++;
}
}
if(!map.containsKey(arr[i])) {//判断哈希表内是否有该元素如果有不重复进入哈希表
map.put(arr[i], sum);
// sum=1;//错误:重复字母不进入该语句 不执行计数清空,则到下一个数值进入表之前持续累加,使进入表中数据V数据比实际大
}
sum=1;//一组数值比较完成后,计数清空
}
//获取V对应的K:
Iterator<String> it = map.keySet().iterator();//获取一个迭代器
while (it.hasNext()) {//遍历集合中元素
String key = it.next().toString();
if(map.get(key).equals(getMaxValue(map))) {//获取最大V对应的K
Map<String, Integer> map1 = new HashMap<String, Integer>();//建立哈希表储存最大V对应的K
map1.put(key, (Integer) getMaxValue(map));
System.out.println(getMinKey(map1));//获取新哈希表中最小K
System.out.println(getMaxValue(map));
break;
}
}
}
public static Object getMaxValue(Map<String, Integer> map) {//获取最大V
if(map== null) {
return null;
}
Collection<Integer> c = map.values();//获取所有V的集合
Object[] obj = c.toArray();
Arrays.sort(obj);//将集合元素进行排序
return obj[obj.length-1];//取最后一个元素:最大元素
}
public static Object getMinKey(Map<String, Integer> map1) {//获取最小K
if(map1== null) {
return null;
}
Set<String> set = map1.keySet();//获取所有K的集合
Object[] obj = set.toArray();
Arrays.sort(obj);//将集合元素进行排序
return obj[0];//取第一个一个元素:最小元素
}
}