java hasnext底层代码
时间: 2023-05-03 14:05:50 浏览: 80
java hasNext()使用实例解析
Java中的Scanner类中的hasNext方法用于判断是否还有输入值,下面是该方法的底层源码:
```
public boolean hasNext() {
ensureOpen();
while (!sourceClosed) {
if (position >= buf.limit()) {
compact();
fill();
} else {
for (int i = position; i < buf.limit(); i++) {
if (isWhitespace(buf.get(i))) {
return true;
}
}
if (sourceClosed) {
return false;
}
compact();
fill();
}
}
return false;
}
```
该方法首先会调用ensureOpen方法保证Scanner实例仍然是开启状态。然后进入一个while循环,直至输入源被关闭或者有新的输入数据。
在while循环中,首先判断输入缓冲区buf中是否还有未处理的数据,若全部处理完毕则调用compact方法来将缓冲区中剩余的数据移到buf的开头。
当缓冲区buf中有未处理的数据时,会遍历buffer,一旦发现有非空白字符则返回true,否则再次调用fill方法来读取新的输入。
若输入源被关闭了,则直接返回false。
如果以上的判断条件都不符合,说明出现了未知的异常情况,返回false。
阅读全文