练习题:
1个字符串中可能包含a-z中的多个字符,字符也可能重复,例如:String data = “aabcexmkduyruieiopxzkkkkasdfjxjdsds”;写一个程序,对于给定一个这样的字符串求出字符串出现次数最多的那个字母以及出现的次数(若次数最多的字母有多个,则全部求出)。
结果演示:
出现最多次数的字符集= [k]
出现次数 = 5
sMap = {a=3, b=1, c=1, d=4, e=2, f=1, i=2, j=2, k=5, m=1, o=1, p=1, r=1, s=3, u=2, x=3, y=1, z=1}
<<< 请您给予关注增加动力 >>>
解题代码:
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
public class Test {
public static void main(String[] args) {
String s = "aabcexmkduyruieiopxzkkkkasdfjxjdsds";
char[] chars = s.toCharArray();//形成char数组
HashMap<String, Integer> sMap = new HashMap<>();//用来装字符以及个数
for (char aChar : chars) {//遍历
String s1 = String.valueOf(aChar);//转为String类型
if (sMap.containsKey(s1)) {//判断map中是否包含次String
Integer num = sMap.get(s1)+1;//查询出此String的
sMap.put(s1, num);
} else {
sMap.put(s1, 1);
}
}
int maxNum = Collections.max(sMap.values());//字符出现最多的次数
HashSet<String> set = new HashSet<>();//用来放出现次数多的字符
for (Map.Entry<String,Integer> entry:sMap.entrySet()){ //转为set通过getValue方法拿到相应的key
if (entry.getValue()==maxNum){
set.add(entry.getKey());
}
}
System.out.println("出现最多次数的字符集= " + set);
System.out.println("出现次数 = " + maxNum);
System.out.println("sMap = " + sMap);
}
}