用java编写一个程序,接收用户输入的一个字符串(可以包含空格),统计其中所有出现过的所有字符,并按照频率高低的顺序排列输出。频率相同的字符按输入顺序输出。
时间: 2024-05-06 07:19:21 浏览: 7
好的,这是一个技术问题,我可以回答你。这个程序可以通过Java中的HashMap来实现。你需要先把每个字符作为键存入HashMap中,值则表示该字符出现的次数。然后遍历输入的字符串,依次统计每个字符的出现次数。最后将HashMap中的所有键值对按值从高到低排序,并按照输入顺序输出。以下是示例代码:
```
import java.util.*;
public class CharFrequency {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符串:");
String input = scanner.nextLine();
// 使用HashMap统计字符出现次数
Map<Character, Integer> frequencyMap = new HashMap<>();
for (char c : input.toCharArray()) {
frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
}
// 将HashMap中所有键值对按值从高到低排序
List<Map.Entry<Character, Integer>> entries = new ArrayList<>(frequencyMap.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<Character, Integer>>() {
public int compare(Map.Entry<Character, Integer> e1, Map.Entry<Character, Integer> e2) {
if (e1.getValue().equals(e2.getValue())) {
// 如果两个字符出现次数相同,按照输入顺序比较
return input.indexOf(e1.getKey()) - input.indexOf(e2.getKey());
} else {
// 否则按照出现次数从高到低排序
return e2.getValue() - e1.getValue();
}
}
});
// 按照排序后的顺序输出字符及出现次数
for (Map.Entry<Character, Integer> entry : entries) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}
```