java程序统计字符串中出现的所有字符,然后按照字符出现频率大小排序输出,频率相同时,按输入顺序输出。输出形式规定为每行输出4个字符数据,输出格式为:字符-出现次数。每个字符-出现次数输出中间用一个空格分隔,每行末尾没有空格。程序输出结尾有一个回车。
时间: 2023-04-12 08:01:02 浏览: 105
以下是一个可能的解决方案:
```java
import java.util.*;
public class CharFrequency {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
Map<Character, Integer> frequencyMap = new LinkedHashMap<>();
for (char c : input.toCharArray()) {
frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
}
List<Map.Entry<Character, Integer>> frequencyList = new ArrayList<>(frequencyMap.entrySet());
frequencyList.sort((a, b) -> {
int cmp = b.getValue().compareTo(a.getValue());
return cmp != 0 ? cmp : a.getKey().compareTo(b.getKey());
});
for (int i = 0; i < frequencyList.size(); i++) {
Map.Entry<Character, Integer> entry = frequencyList.get(i);
System.out.printf("%c-%d", entry.getKey(), entry.getValue());
if (i % 4 == 3 || i == frequencyList.size() - 1) {
System.out.println();
} else {
System.out.print(" ");
}
}
}
}
```
这个程序首先读入一个字符串,然后使用一个 LinkedHashMap 统计每个字符出现的次数。LinkedHashMap 保证了插入顺序,所以当出现次数相同时,字符的顺序就是输入顺序。
然后将 Map.Entry 对象转换为 List,使用一个自定义比较器对 List 进行排序。比较器首先按照出现次数从大到小排序,如果出现次数相同,则按照字符顺序排序。
最后按照题目要求输出结果。每输出 4 个字符就换行,最后一行也要换行。
阅读全文