代码:
Scanner input;
File file = new File("Latex3.bib");
input = new Scanner(file);
input.useDelimiter("@ARTICLE");
while(input.hasNext()) {
System.out.println("It should not print this");
s = input.next();
System.out.println("Token"+c+": "+s);
c++;
author = s.substring
(s.indexOf("author={")+8,
s.indexOf("}", s.indexOf("author={")+8));
System.out.println("Authors for this ARTICLE: "+author);
System.out.println();
}
(在代码中,c
是我先前在原始代码中声明的int
,仅用于每个循环的计数和递增)。
我从我认为不应抛出的代码中得到了奇怪的异常。测试每个输入文件后,即使Latex3.bib文件中没有“ @ARTICLE”,我的while循环也会运行。
据我所知,如果文件没有“ @ARTICLE”,则意味着input
不会获得任何令牌。因此,从一开始,其hasNext()
应该返回false
。但这不是。
我觉得有趣和奇怪的部分是:如果Latex3.bib完全为空(甚至没有一个空格键或Enter),while循环或任何将其读取为空文件的东西,因此没有给{{ 1}}。
但是,如果Latex3.bib具有1〜3个换行符(输入),则运行while循环。我不知道为什么会这样。我怀疑input
不会影响或至少与Scanner.useDelimiter(pattern)
之类的其他Scanner方法完美配合,尽管我认为这不是真实情况,因为它是非常关键的功能。
编辑:
为了清楚我得到什么异常,在分配hasNext()
时抛出了StringIndexOutOfBoundsException
。显然,因为文件为空...而且author(String)
或查找索引中没有任何内容。