编程要求 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: 将指定文本(可以通过右侧文件目录下的src/step3/readme.txt查看)以降序的方式输出每个单词出现的次数。 测试说明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; } } 补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。 预期输出: 参考右边测试集中的输出。
时间: 2025-05-31 18:50:05 浏览: 31
### 方法实现
为了实现统计指定文本中每个单词出现的次数,并按照降序输出的功能,可以通过以下步骤完成:
1. **读取输入文本**:通过 `Scanner` 或其他方式获取用户输入的文本。
2. **分割单词**:利用正则表达式将文本拆分为单个单词列表。
3. **存储词频数据**:使用 `HashMap<String, Integer>` 存储每个单词及其对应的出现次数[^1]。
4. **排序词频数据**:创建一个 `List<Map.Entry<String, Integer>>` 并对其进行排序操作,基于单词出现的频率进行降序排列。
5. **输出结果**:遍历排序后的列表并将结果打印。
以下是完整的 Java 实现代码:
```java
import java.util.*;
public class WordFrequencyCounter {
public static void countAndSortWords(String text) {
// 使用正则表达式去除标点符号并分割单词
String[] words = text.replaceAll("[^a-zA-Z0-9]", " ").toLowerCase().split("\\s+");
// 创建哈希表存储单词和其对应计数
Map<String, Integer> wordMap = new HashMap<>();
for (String word : words) {
if (!word.isEmpty()) { // 跳过空字符串
wordMap.put(word, wordMap.getOrDefault(word, 0) + 1);
}
}
// 将哈希表中的键值对放入列表以便于排序
List<Map.Entry<String, Integer>> entryList = new ArrayList<>(wordMap.entrySet());
// 对列表按值(即单词出现次数)进行降序排序
entryList.sort((entry1, entry2) -> entry2.getValue().compareTo(entry1.getValue()));
// 打印排序后的结果
for (Map.Entry<String, Integer> entry : entryList) {
System.out.println("单词 \"" + entry.getKey() + "\" 出现了 " + entry.getValue() + " 次");
}
}
public static void main(String[] args) {
// 测试用例
String sampleText = "This is a test. This test is only a test.";
countAndSortWords(sampleText);
}
}
```
#### 关键点解析
- 正则表达式的用途在于清理文本中的非字母字符,从而确保仅保留有效的单词。
- 借助 `getOrDefault()` 方法简化了判断是否存在某个键的过程,使代码更加简洁高效。
- 排序逻辑采用 Lambda 表达式配合 Comparator 完成,提升了可读性和性能表现。
---
###
阅读全文
相关推荐


















