0
我正在研究一個Java項目,它通過將Gettysburg地址從文本文件轉換爲Word對象的線性鏈接列表來鬆散地模擬搜索引擎,該列表包含字詞的字符串和行位置。我將它們與可忽略單詞的哈希表進行比較,然後將相當多的單詞插入二叉搜索樹中,如果出現重複,則會記錄出現次數。字符串可以訪問整個文本文件
我有我的散列函數和大部分的樹將部分下降,但我有我似乎無法弄清楚關於我輸入一個問題:
當讀取使用BufferedReader.readLine的葛底斯堡演說(),在清理了標點符號的字符串之後,String似乎包含整個文本文件,儘管它被實例化爲line = br.readLine()。
這裏是getty.txt的前幾行:
四個得分87年前,我們的祖先帶來了,在這個
大陸,一個新的國家,孕育於自由之中,並熱衷於 命題人人生而平等。現在我們搞了一個
我已經附上我的代碼在上下文中。
private static ObjectList getWords(String fileName) throws IOException
{
BufferedReader br = new BufferedReader(new FileReader(fileName));
ObjectList wordList = new ObjectList();
int lineCNT = 1;
int positionCNT = 1;
String line = br.readLine();
System.out.println(line);
while(line != null)
{
line = line.replaceAll("\\p{Punct}", ""); // This somehow has access to the whole file String.
System.out.println(line);
String delims = "[\\W]+";
String[] tokens = line.split(delims);
for (int i = 0; i < tokens.length; i++)
{
System.out.println(tokens[i]);
}
while(positionCNT-1 < tokens.length)
{
LinePosition linePosition = new LinePosition(lineCNT, positionCNT);
Word word = new Word(tokens[positionCNT-1], linePosition);
wordList.insert(word);
positionCNT++;
}
line = br.readLine();
lineCNT++;
positionCNT = 1;
}
br.close();
while (!wordList.isEmpty())
{
System.out.println(((Word)wordList.removeFirst()).getText());
}
return wordList;
}
你確定你的文本文件實際上並不包含整行地址嗎?我從來沒有見過'BufferedReader.readLine()'閱讀多行文本... –
@JonSkeet當我在line = br.readLine()後面打印行時,它只打印一行,但在打印語句後打印它打印整個地址。 –
你的行是否有一個有效的終止符,因爲根據readline()函數,行被認爲由換行符('\ n'),回車符('\ r')或回車符隨後立即換行。 –