问题:
java语言编辑,实现一个词频统计工具 :读取文本文件,统计并输出每个单词的频率。
解答思路:
以下是一个Java程序,该程序读取一个文本文件,统计并输出每个单词的频率。请注意,该程序假定单词由空格、换行符、标点符号等非字母数字字符分隔。
java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class WordFrequencyCounter {
public static void main(String[] args) {
// 假设文件名为 "textfile.txt",您可以根据实际情况修改文件名
String filename = "textfile.txt";
Map<String, Integer> wordCountMap = countWordFrequency(filename);
// 输出每个单词及其频率
for (Map.Entry<String, Integer> entry : wordCountMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
private static Map<String, Integer> countWordFrequency(String filename) {
Map<String, Integer> wordCountMap = new HashMap<>();
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line;
while ((line = reader.readLine()) != null) {
// 使用非字母数字字符分割单词
String[] words = line.split("[^a-zA-Z0-9]+");
for (String word : words) {
// 忽略空字符串
if (!word.isEmpty()) {
word = word.toLowerCase(); // 转换为小写以实现不区分大小写的统计
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return wordCountMap;
}
}
在这个程序中,'countWordFrequency' 方法负责读取指定文件名对应的文件,并统计单词频率。程序首先创建一个'HashMap'来存储单词和它们的频率。然后,它使用'BufferedReader'来逐行读取文件。对于每一行,它使用正则表达式'[^a-zA-Z0-9]+'来分割单词,并统计每个单词出现的次数。
'main' 方法中指定了要读取的文件名(这里是 '"textfile.txt"'),并调用 'countWordFrequency' 方法。然后,程序遍历 'wordCountMap' 并打印每个单词及其频率。
为了运行这个程序,请确保有名为 "textfile.txt" 的文本文件在同一目录下,或者修改 'filename' 变量以指向正确的文件路径。然后,编译并运行该程序。
编译并运行命令如下:
bash
javac WordFrequencyCounter.java
java WordFrequencyCounter
确保将 'WordFrequencyCounter.java' 替换为你保存上述代码的文件名。
(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)