2016-05-09 38 views
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; 
} 
+0

你確定你的文本文件實際上並不包含整行地址嗎?我從來沒有見過'BufferedReader.readLine()'閱讀多行文本... –

+0

@JonSkeet當我在line = br.readLine()後面打印行時,它只打印一行,但在打印語句後打印它打印整個地址。 –

+0

你的行是否有一個有效的終止符,因爲根據readline()函數,行被認爲由換行符('\ n'),回車符('\ r')或回車符隨後立即換行。 –

回答

0

您的while循環遍歷整個文件,每次迭代打印一行。你的wordList將包含文件的所有單詞。如果你真的只想在第一行工作,你應該簡單地刪除你的while(line != null)循環。

相關問題