文件末尾有一个额外的换行符。
hasNextLine()
检查linePattern
缓冲区中是否还有另一个。hasNext()
检查缓冲区中是否有可解析的令牌,由扫描仪的定界符分隔。
由于扫描程序的定界符是空格,并且
linePattern也是空格,因此
linePattern缓冲区中可能有一个a ,但没有可解析的标记。
通常,最常见的处理此问题的方法是始终
nextLine()在解析文本每一行中的所有标记(例如数字)之后调用。在使用
Scanner时也需要从中读取用户输入时执行此操作
System.in。要使扫描仪越过此空格定界符,必须使用
scanner.nextLine()清除行定界符。
附录:
LinePattern被定义为
Pattern与此匹配的:
private static final String LINE_SEPARATOR_PATTERN = "rn|[nru2028u2029u0085]";private static final String LINE_PATTERN = ".*("+LINE_SEPARATOR_PATTERN+")|.+$";默认令牌定界符是这样的
Pattern:
private static Pattern WHITESPACE_PATTERN = Pattern.compile("\p{javaWhitespace}+");


