Scanner hasNext(String pattern)错误地返回true

时间:2014-10-28 12:56:43

标签: java regex java.util.scanner

我编写了一个用于解析模板的扫描仪实用程序 请考虑代码段:

String input = FileUtils.readFileToString(new File("input file path"));

Scanner scanner = new Scanner(input);
scanner.useDelimiter(System.getProperty("line.separator"));

System.out.println("Checking");
while(scanner.hasNext())
{
    System.out.print(scanner.hasNext("\\s*#[^\\n]*"));
    System.out.println(" : " + scanner.nextLine());
}

输入文件内容:

# Line 1
#######################

# Check
 # Matched with spaces
     #


// End of file

注意:输入中不存在文件行的结尾。

产生的结果:

Checking
true : # Line 1
true : #######################
true : 
true : # Check
true :  # Matched with spaces
true :       #
false :      
false :      

我的问题是为什么第三行hasNext()返回true,即使它没有以'#'开头?
任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

因为hasNext

  

如果下一个标记与从指定字符串构造的模式匹配,则返回true。

空白行不包含令牌,因此它从第4行找到下一个令牌。