我正在研究一个松散模拟搜索引擎的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;
}
答案 0 :(得分:0)
您的while
循环遍历整个文件,每次迭代都会打印一行。 wordList将包含文件的所有单词。如果您真的只想在第一行工作,则应该只删除while(line != null)
循环。