第一种方式:利用key-value方式进行统计,将字符作为key,出现次数作为value,所以需要先创建一个map
public static String maxCount(String str){
Map<Character,Integer> map= new HashMap<>();
//利用for循环将字符串中每个字符拿出来,看是否存在map中
for (int i = 0; i < str.length(); i++) {
//如果不存在,存入map,value为一
if (map.get(str.charAt(i))==null){
map.put(str.charAt(i),1);
}else {
//如果存在,将value加一
Integer integer = map.get(str.charAt(i));
integer++;
ass.put(str.charAt(i),integer);
}
}
char name = ' ';
int maxCount =0;
for (char key:map.keySet()){
if (map.get(key)>maxCount){
maxCount = map.get(key);
name = key;
}
}
return "出现最多的字母是"+name+",共出现了"+maxCount+"次";
}
第二种方式:先将字符串转换为数组,再将数组内字符由Unicode的编码由大到小进行排序,再用 lastIndexOf(),统计到此字符最后出现的位置进行运算得出字符数,代码如下:
public static String maxCount1(String s){
String[] split = s.split("");
//将数组的字符由大到小 进行排序
Arrays.sort(split);
//原始方式,使数组变为字符串,这里我用原始的数组转换字符串方法
//运用StringUtils方法,请看我上一篇文章
String join ="";
for (String string : split) {
join= join.concat(string+",");
}
join = join.substring(0,join.length()-1);
String name = "";
int maxCount=0;
for (int i = 0; i < join.length(); i++) {
String name1 = join.substring(i,i+1);//获取字符
//获取此字符最后出现的位置
int j = join.lastIndexOf(name1);
//得到此字符出现总次数
int count = j-i+1;
if (count==maxCount){
name = name1+"和"+name;
}
if (count>maxCount){
maxCount = count;
name = name1;
}
i = j;
}
return "出现次数最多的字符是:"+name+",出现次数:"+maxCount;
}