Сканер hasNext (String pattern) ложно возвращает true

Я написал утилиту сканера для разбора шаблона. Рассмотрим фрагмент кода:

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 ответ

Потому что hasNext:

Возвращает true, если следующий токен совпадает с шаблоном, построенным из указанной строки.

Пустая строка не содержит токенов, поэтому она находит следующий токен из строки 4.

licensed under cc by-sa 3.0 with attribution.