字符串可以访问整个文本文件

时间:2016-05-09 07:23:41

标签: java input

我正在研究一个松散模拟搜索引擎的Java项目,它将Gettysburg地址从文本文件转换为Word对象的线性链接列表,其中包含字符串和行位置。我将这些与可忽略单词的哈希表进行比较,然后将相当多的单词插入到二叉搜索树中,如果出现重复,则会记录出现次数。

我有散列函数和大部分树木添加部分,但我遇到的问题似乎无法弄清楚我的输入:

当使用BufferedReader.readLine()读取Gettysburg地址时,在清除字符串似乎包含整个文本文件的标点字符串后,尽管它被实例化为line = br.readLine()。

以下是getty.txt的前几行:

四年前和七年前,我们的父亲带来了这一点 大陆,一个新的国家,在自由中孕育,并致力于 所有人都是平等的主张。现在我们正在搞一个

我已将下面的代码附加到上下文中。

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;
}

1 个答案:

答案 0 :(得分:0)

您的while循环遍历整个文件,每次迭代都会打印一行。 wordList将包含文件的所有单词。如果您真的只想在第一行工作,则应该只删除while(line != null)循环。