这里具体说明一下java中,hasNextLine
和hasNext
的区别
先说具体的结论:
采用has xxxx
的话,后面也要使用next xxxx
。比如前面使用hasNextLine
,那么后面需要使用nextLine
来处理输入。
----分割线----
说一下两个方法的区别
hasNext
是检查是否有非空字符。
hasNextLine
是检查输入中是否还有linePattern
。其中LinePattern
其实是匹配一个正则表达式。
private static final String LINE_SEPARATOR_PATTERN =
"\r\n|[\n\r\u2028\u2029\u0085]";
private static final String LINE_PATTERN = ".*("+LINE_SEPARATOR_PATTERN+")|.+$";
判题系统中所有测试用例都是存储在文件中,在上面的例子中,测试用例的文件为:
7 15 9 5
当处理完5之后,没有非空字符了,hasNext
返回了false,但是在linux系统中,5
后面还有一个换行符\n
,0X0A
(有兴趣的同学可以自己创建然后用二进制方式查看文件)。
所以hasNextLine
会返回true
,但是其实后面并没有可以读的元素了,从而下面的in.nextInt
会抛出异常。