关于java:Scanner hasNext(String pattern)false返回true

Scanner hasNext(String pattern) falsely returns true

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

1
2
3
4
5
6
7
8
9
10
11
12
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*#[^\
]*"
));
    System.out.println(" :" + scanner.nextLine());
}

输入文件内容:

1
2
3
4
5
6
7
8
9
# Line 1
#######################

# Check
 # Matched with spaces
     #


// End of file

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

产出量:

1
2
3
4
5
6
7
8
9
Checking
true : # Line 1
true : #######################
true :
true : # Check
true :  # Matched with spaces
true :       #
false :      
false :

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


因为hasNext

Returns true if the next token matches the pattern constructed from the specified string.

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