所以我正在寫一個函數parse()來逐行讀取指定的文件,並且我正在使用String.split(正則表達式)函數將行分解爲字符串數組。此外,每個單詞都將傳遞給另一個作爲parse()參數傳遞的函數中包含的HashMap。雖然我瀏覽了Stack Overflow以獲得任何幫助,但我仍然不確定爲什麼我的函數導致我的程序掛起。使用String.split(正則表達式)來分隔空格和標點符號
下面是函數本身:
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循環就好了,但是當詞表的所謂施工後添加一個println()語句,程序無限打印出的空的wordList和程序不會從函數返回。從我的角度來看,我被引導認爲我正在使用的正則表達式並沒有達到我所期望的目標。
爲了詳細說明我需要什麼,正則表達式應該隔離由僅由字母字符組成的單詞。在完美的情況下,連詞或帶連字符的單詞可以完整識別並添加到單詞列表中。但是,我可以接受像「不會」和「二十二」這樣的詞彙,以成爲「贏」,「t」,「二十」和「二」。
作爲一個測試案例,我正在運行一個純文本文件,其中包含Lewis Carroll的詩「Jabberwocky」,儘管這不包含非常困難的非單詞標記。
這是什麼導致了這個問題,我該如何改進這個功能所做的解析?
夠公平的。這是我們時常想念的簡單事情,不是? 我修改了部分代碼,如下所示: 'while(fileReader.ready()){ line = fileReader.readLine(); wordList = line.split(searchExpression);' 我想我可以找出其餘部分,我們將會看到。 感謝您的回答! – MarekVarro 2013-03-05 09:35:51