因此,我正在编写一个函数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”,尽管其中不包含很难拆分的非单词标记.
是什么导致此问题,如何改善此功能的解析?