Scanner 类
一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。
A Scanner
分隔符模式将输入打破到令牌,默认情况下匹配空格。 然后可以使用各种next
方法将得到的令牌转换成不同类型的值。
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
// System.in 是指系统输入通过键盘录入数据
//Sanner中的读取函数,不管是nextInt(),还是nextLine()都是采用正则匹配的方式读取的。
//nextLine()函数是返回从当前的缓冲位置,到换行符之间的字符串,即从缓冲区当前位置开始的一行。
通过构造方法可以查看能够通过很多方式进行扫描,可以通过输入流和文件进行实现。
常用方法
next()
public String next() {
ensureOpen();
clearCaches();
//-读取数据至buf,匹配分隔模式,返回之间的内容
while (true) {
// 若准备工作完成,获取完整令牌
String token = getCompleteTokenInBuffer(null);
if (token != null) { // 匹配分隔模式,返回之间的内容
matchValid = true;
skipped = false;
return token;
}
if (needInput)
//从source中读取buf大小的数据
readInput();
else
throwFor();
}
}
hasNext()
public boolean hasNext() {
ensureOpen(); // 判断scaner 是否完成构建
saveState(); // 保存 sacner 的状态
while (!sourceClosed) {
if (hasTokenInBuffer())
return revertState(true); // 如果存在则设置状态为 true
readInput();
}
boolean result = hasTokenInBuffer();
return revertState(result);
}
private boolean hasTokenInBuffer() {
matchValid = false;
matcher.usePattern(delimPattern);
matcher.region(position, buf.limit());
// Skip delims first
if (matcher.lookingAt())
position = matcher.end();
// If we are sitting at the end, no more tokens in buffer
if (position == buf.limit())
return false;
return true;
}
以前只知道怎么用,现在学着知道他为什么怎么用
版权声明:本文为tyh18226568070原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。