用Java编写一个程序,从键盘读入一段英文(多行),找出其中所有的英文单词,数统计每个单词出现的次,并按照单词出现次数由大到小排序后输出。
时间: 2024-06-12 21:06:27 浏览: 107
Java统计英文句子中出现次数最多的单词并计算出现次数的方法
可以使用HashMap来统计单词出现的次数,然后用一个List来存储每个单词和它的出现次数,并按照出现次数排序输出。
代码如下:
```java
import java.util.*;
public class WordCount {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<String, Integer> wordCountMap = new HashMap<>();
// 从键盘读入英文文本
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.isEmpty()) {
break;
}
String[] words = line.split("\\s+"); // 使用正则表达式分割单词
for (String word : words) {
if (word.matches("[a-zA-Z]+")) { // 过滤掉非英文单词
int count = wordCountMap.getOrDefault(word, 0);
wordCountMap.put(word, count + 1);
}
}
}
// 将统计结果按照出现次数排序并输出
List<Map.Entry<String, Integer>> wordCountList = new ArrayList<>(wordCountMap.entrySet());
Collections.sort(wordCountList, (e1, e2) -> e2.getValue().compareTo(e1.getValue()));
for (Map.Entry<String, Integer> entry : wordCountList) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
```
这个程序可以处理多行英文文本,使用正则表达式分割单词时,使用了"\s+"表示一个或多个空白字符(包括空格、制表符、换行符等),过滤掉了非英文单词。
最后将统计结果按照出现次数排序并输出,使用了Java 8的Lambda表达式来定义Comparator。如果不熟悉Lambda表达式,可以使用传统的匿名类方式来定义Comparator,代码如下:
```java
Collections.sort(wordCountList, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
return e2.getValue().compareTo(e1.getValue());
}
});
```
阅读全文