所以我正在编写一个名为parse()的函数,逐行读取指定文件,并利用String.split(regex)函数将每行分解为字符串数组。此外,每个单词都会传递给另一个作为parse()参数传递的HashMap函数。虽然我已经浏览过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中。然而,我可以接受像“won't”和“twenty-two”这样的单词变成“won”,“t”,“twenty”和“two”。
作为一个测试案例,我正在运行一个包含Lewis Carroll的诗歌“Jabberwocky”的纯文本文件,尽管这并不包含非常困难的非单词标记以分割。
是什么导致了这个问题,如何改进此函数所做的解析?