package step3; import java.util.Map; import java.util.HashMap; import java.util.StringTokenizer; public class StudentDemo{ //获取单词的数量 public Map<String, Integer> getWordCount(String str) { Map<String, Integer> map = new HashMap<String, Integer>(); //请在此添加实现代码 /********** Begin **********/ /********** End **********/ return map; } } 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: 将指定文本(可以通过右侧文件目录下的src/step3/readme.txt查看)以降序的方式输出每个单词出现的次数。
时间: 2025-06-13 12:57:59 浏览: 8
### Java实现单词频率统计并按降序排列
在Java中,可以通过以下步骤实现字符串中每个单词的出现次数统计,并将结果按降序排列。以下是具体实现方法:
#### 1. 分割字符串
首先需要将输入的字符串分割为单词数组。可以使用正则表达式来匹配非单词字符(如标点符号、空格等),从而提取出单词[^1]。
```java
String input = "your input string here";
String[] words = input.toLowerCase().split("[\\s.,!?]+");
```
#### 2. 使用Map统计单词频率
接下来,创建一个`HashMap`来存储每个单词及其对应的出现次数。遍历单词数组,更新`HashMap`中的值[^1]。
```java
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> wordCountMap = new HashMap<>();
for (String word : words) {
if (!word.isEmpty()) {
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
}
}
```
#### 3. 将Map转换为List并排序
为了对单词频率进行降序排列,需要将`Map`中的键值对转换为`List`,然后使用`Collections.sort()`方法进行排序[^2]。
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
List<Map.Entry<String, Integer>> list = new ArrayList<>(wordCountMap.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue()); // 按值降序排列
}
});
```
#### 4. 输出结果
最后,遍历排序后的列表,输出每个单词及其出现次数。
```java
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
```
#### 完整代码示例
以下是完整的Java代码示例:
```java
import java.util.*;
public class WordFrequencyCounter {
public static void main(String[] args) {
String input = "Hello world! Hello Java. Welcome to the world of Java.";
String[] words = input.toLowerCase().split("[\\s.,!?]+");
Map<String, Integer> wordCountMap = new HashMap<>();
for (String word : words) {
if (!word.isEmpty()) {
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
}
}
List<Map.Entry<String, Integer>> list = new ArrayList<>(wordCountMap.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue()); // 按值降序排列
}
});
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
```
### 注意事项
- 在分割字符串时,确保正则表达式能够正确处理所有可能的分隔符。
- 如果需要进一步优化性能或处理大规模数据,可以考虑使用Hadoop等分布式计算框架。
阅读全文
相关推荐

















