我正在用 Java 编写一个简单的二元组频率计数算法,遇到一个我不知道如何解决的问题。
我的源文件是一个 9MB 的 .txt 文件,其中包含随机单词,以空格分隔。
当我运行将输入限制为前 100 行的脚本时,我得到的二元组“嘿那里”的频率值为 1。
但是,当我取消仅扫描前 100 行并扫描整个文件的限制时,对于同一个二元组搜索,我得到一个 null 值。HashMap 中的键/值对现在为空。
我将所有二元组存储在 HashMap 中,并使用 BufferedReader 读取文本文件。
是什么导致二元组(键)从 HashMap 中删除或覆盖?如果我正在阅读整个文件或只是它的第一部分,这无关紧要。
public class WordCount {
public static ArrayList<String> words = new ArrayList<String>();
public static Map<String, Integer> bi_count = new HashMap<String, Integer>();
public static void main(String[] args) {
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(args[0]));
System.out.println("\nProcessing file...");
while (br.readLine() != null) {
// for (int i = 0; i < 53; i++ ) {
sCurrentLine = br.readLine();
if (sCurrentLine != null) {
String[] input_words = sCurrentLine.split("\\s+");
for (int j = 0; j < input_words.length; j++) {
words.add(input_words[j]);
}
}
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
if (br != null)br.close();
countWords();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
private static void countWords() {
for (int k = 0; k < words.size(); k++) {
String word = words.get(k);
String next = "";
if (k != words.size() - 1) {
next = words.get(k+1);
}
String two_word = word + " " + next;
if (bi_count.containsKey(two_word)) {
int current_count = bi_count.get(two_word);
bi_count.put (two_word, current_count + 1);
}
else {
bi_count.put( two_word, 1);
}
}
System.out.println("File processed successfully.\n");
}