结合Map从统计从文件中每个英文单词出现的频率,分别按照关键字的字母序列从小到大显示输出或按照单词的频率从小到大显示输出;
时间: 2024-02-27 16:52:43 浏览: 75
统计指定的文本文件(英文)中,每个单词的出现频率,输出按字典序排列的单词频度表。
好的,这是一个比较复杂的任务,需要用到文件读取、字符串处理、Map 等知识。下面是一个基本的思路:
1. 打开文件,读取文件内容并存储到字符串中;
2. 将字符串中的所有英文单词都提取出来,并统计它们的频率,存储到一个 Map 中;
3. 对于关键字的字母序列从小到大显示输出,可以先将 Map 中的键(即单词)存放到一个 ArrayList 中,然后对 ArrayList 进行排序,最后按照排好序的顺序遍历 Map 并输出;
4. 对于单词的频率从小到大显示输出,可以将 Map 中的键值对存放到一个 ArrayList 中,然后对 ArrayList 进行排序,最后按照排好序的顺序遍历 ArrayList 并输出。
下面是一个简单的 Java 代码实现,仅供参考:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class WordFrequency {
public static void main(String[] args) throws IOException {
String filename = "/path/to/file.txt"; // 文件路径
String content = readFile(filename); // 读取文件内容
Map<String, Integer> wordFreq = countFrequency(content); // 统计单词频率
// 按照关键字的字母序列从小到大显示输出
ArrayList<String> sortedWords = new ArrayList<>(wordFreq.keySet());
sortedWords.sort(Comparator.naturalOrder());
for (String word : sortedWords) {
System.out.println(word + ": " + wordFreq.get(word));
}
// 按照单词的频率从小到大显示输出
ArrayList<Map.Entry<String, Integer>> sortedEntries = new ArrayList<>(wordFreq.entrySet());
sortedEntries.sort(Map.Entry.comparingByValue());
for (Map.Entry<String, Integer> entry : sortedEntries) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
// 读取文件内容并返回字符串
private static String readFile(String filename) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(filename));
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append('\n');
}
br.close();
return sb.toString();
}
// 统计字符串中每个单词出现的频率并返回一个 Map
private static Map<String, Integer> countFrequency(String content) {
Map<String, Integer> wordFreq = new HashMap<>();
String[] words = content.split("\\W+"); // 以非字母字符为分隔符提取单词
for (String word : words) {
if (word.matches("[a-zA-Z]+")) { // 只统计由字母组成的单词
wordFreq.put(word.toLowerCase(), wordFreq.getOrDefault(word.toLowerCase(), 0) + 1);
}
}
return wordFreq;
}
}
```
阅读全文