Java结合Map从统计从文件中每个英文单词出现的频率,分别按照关键字的字母序列从小到大显示输出或按照单词的频率从小到大显示输出
时间: 2024-02-25 21:56:41 浏览: 23
好的,这是一个比较常见的文本处理问题。我可以给你提供一个简单的Java实现,使用Map来统计单词出现的频率,然后按照关键字字母序列或单词频率进行排序输出。
代码如下:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
public class WordFrequency {
public static void main(String[] args) {
Map<String, Integer> wordMap = new HashMap<>();
String filePath = "text.txt";
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
String[] words = line.split("[^a-zA-Z]+");
for (String word : words) {
if (word.length() == 0) {
continue;
}
String lowerWord = word.toLowerCase();
if (wordMap.containsKey(lowerWord)) {
wordMap.put(lowerWord, wordMap.get(lowerWord) + 1);
} else {
wordMap.put(lowerWord, 1);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
// 按照字母序列排序输出
System.out.println("按照字母序列排序:");
List<String> sortedWords = new ArrayList<>(wordMap.keySet());
Collections.sort(sortedWords);
for (String word : sortedWords) {
System.out.println(word + " " + wordMap.get(word));
}
// 按照单词频率排序输出
System.out.println("按照单词频率排序:");
List<Map.Entry<String, Integer>> sortedEntries = new ArrayList<>(wordMap.entrySet());
Collections.sort(sortedEntries, Comparator.comparing(Map.Entry::getValue));
for (Map.Entry<String, Integer> entry : sortedEntries) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
```
这个代码使用一个Map来统计每个单词出现的次数。通过使用`BufferedReader`和`FileReader`读取文本文件,然后使用正则表达式`[^a-zA-Z]+`来匹配文本中的单词。最后,通过Java中的`Collections.sort`方法对Map按照字母序列或单词频率进行排序输出。