Java编程使用Scanner类和正则表达式统计一篇英文中的单词,要求如下:从文件中读取英文, 统计一共出现了多少个单词。 统计有多少个互不相同的单词。 按单词出现频率的大小输出单词,频率显示为三位小数代码
时间: 2024-05-30 12:14:55 浏览: 97
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class WordFrequency {
public static void main(String[] args) {
String fileName = "example.txt"; // 文件名
Map<String, Integer> wordCountMap = new HashMap<>(); // 单词计数的Map
Set<String> uniqueWords = new HashSet<>(); // 互不相同的单词的Set
int totalWords = 0; // 总单词数
try {
Scanner scanner = new Scanner(new File(fileName));
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] words = line.split("[^a-zA-Z]+"); // 正则表达式分割单词
for (String word : words) {
if (word.length() > 0) { // 排除空白字符
totalWords++;
String key = word.toLowerCase(); // 不区分大小写
wordCountMap.put(key, wordCountMap.getOrDefault(key, 0) + 1); // 单词计数
uniqueWords.add(key); // 添加到互不相同的单词的Set中
}
}
}
scanner.close();
} catch (FileNotFoundException e) {
System.err.println("File not found: " + fileName);
}
System.out.println("Total words: " + totalWords);
System.out.println("Unique words: " + uniqueWords.size());
System.out.println("Word frequency:");
// 将单词按照出现频率排序并输出
wordCountMap.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.forEach(entry -> System.out.printf("%-15s %6.3f\n",
entry.getKey(), (double) entry.getValue() / totalWords));
}
}
注意:这只是一个简单的示例代码,实际场景中需要考虑更多情况,如处理标点符号、排除常用词、优化性能等。
阅读全文