统计一个字符串“qzcsbj-*?>>>666j”中每个字符出现的次数,保存到HashMap集合中。通过排序,打印输出次数最多的前三个字符及次数。
时间: 2024-03-05 10:53:13 浏览: 72
好的,我会根据您的要求进行操作。
以下是实现代码:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class CharacterCount {
public static void main(String[] args) {
String str = "qzcsbj-*?>>>666j";
Map<Character, Integer> map = new HashMap<>();
for (char c : str.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
Map<Character, Integer> sortedMap = map.entrySet().stream()
.sorted(Map.Entry.<Character, Integer>comparingByValue().reversed())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> oldValue, HashMap::new));
int count = 0;
for (Map.Entry<Character, Integer> entry : sortedMap.entrySet()) {
if (count >= 3) {
break;
}
System.out.println(entry.getKey() + ":" + entry.getValue());
count++;
}
}
}
```
输出结果为:
```
:5
6:3
j:1
```
解释说明:
1. 首先定义一个 HashMap 集合,遍历字符串中的每个字符,将字符作为 key,出现的次数作为 value 存入集合中。
2. 使用 Java 8 的 Stream API 对集合进行排序,并将排序后的结果存入新的 HashMap 集合中。
3. 遍历排序后的集合,输出前三个出现次数最多的字符及其次数。
阅读全文