统计一个字符串“qzcsbj-*?>>>666j”中每个字符出现的次数,保存到HashMap集合中。通过排序,打印输出次数最多的前三个字符及次数
时间: 2024-03-05 21:53:12 浏览: 54
好的,我来为您解答。下面是代码实现:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
String str = "qzcsbj-*?>>>666j";
HashMap<Character, Integer> map = new HashMap<>();
// 统计每个字符出现的次数
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
// 将Map转换为List,并排序
List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
// 输出前三个出现次数最多的字符及其次数
int count = 0;
for (Map.Entry<Character, Integer> entry : list) {
if (count == 3) {
break;
}
System.out.println("字符 " + entry.getKey() + " 出现了 " + entry.getValue() + " 次");
count++;
}
}
}
```
输出结果为:
```
字符 6 出现了 3 次
字符 > 出现了 3 次
字符 j 出现了 2 次
```
这里使用了HashMap来统计每个字符出现的次数,然后将Map转换为List,并通过Comparator实现按值降序排序。最后输出前三个出现次数最多的字符及其次数。
阅读全文