所以我正在编写一个函数 parse() 来逐行读取指定的文件,并且我正在利用 String.split(regex) 函数将该行分解为一个字符串数组。此外,每个单词都将传递给另一个函数中包含的 HashMap,该函数作为参数传递给 parse()。虽然我浏览了 Stack Overflow 以寻求任何帮助,但我仍然不确定为什么我的函数会导致我的程序挂起。
这是函数本身:
public void parse(FrequencyCounter counter) throws IOException {
BufferedReader fileReader = new BufferedReader(new FileReader(file));
String searchExpression = "[\\p{Space}\\p{Punct}]";
String line;
String[] wordList;
line = fileReader.readLine();
while (!line.isEmpty()) {
wordList = line.split(searchExpression);
System.out.println("First value of wordList: " + wordList[0]);
for (String each : wordList) {
if(each.isEmpty())
break;
if(counter.isAnElement(each)) {
counter.incrementKey(each);
} else {
counter.addKey(each);
}
}
}
fileReader.close();
}
所以我可以很好地进入 while 循环,但是当在 wordList 的假定构造之后添加 println() 语句时,程序会无限打印出一个空的 wordList 并且程序不会从函数中返回。从我的角度来看,我被引导相信我使用的正则表达式并没有达到我想要的目的。
为了详细说明我需要什么,正则表达式应该隔离仅由字母字符组成的单词。在完美的情况下,连词或连字词可以被整体识别并添加到 wordList 中。但是,我可以接受像“不会”和“二十二”这样的词变成“赢”、“t”、“二十”和“二”。
作为一个测试用例,我正在运行一个纯文本文件,其中包含 Lewis Carroll 的诗歌“Jabberwocky”,尽管它不包含很难拆分的非单词标记。
是什么导致了这个问题,我该如何改进这个函数完成的解析?