扫描仪next()混淆
在类java.util.Scanner
,方法public String next()
发现并返回来自此Scanner
的下一个完整标记,我很困惑,如果我编写如下程序:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println(in.next());
in.close();
}
并运行该程序,然后输入一个单词并打印该单词,似乎next()
方法返回当前令牌,为什么API会说next()
返回下一个完整的令牌?
这是因为您将Scanner
分配给标准输入( System.in
)。
如果你在这里使用你的确切程序
IDEONE DEMO
OUTPUT (检查链接在执行之前是如何分配stdin
)
Success!
stdin // this is what you assign
hello word
stdout // this is the output of main method
hello
word
如果这不能说明,也许你会发现这个例子很有用。 检查我如何将Scanner
分配给创建的String
:
String input = "hello my name is Jordi";
Scanner s = new Scanner(input); // assign the scanner to String s!!!!
System.out.println(s.next()); // prints: hello
System.out.println(s.next()); // prints: my
System.out.println(s.next()); // prints: name
System.out.println(s.next()); // prints: is
System.out.println(s.next()); // prints: Jordi
s.close();
我会描述所有这些,因为你感到困惑。
Scanner input = new Scanner(System.in)
java.lang.System中是延伸java.lang.Object中一个公共最终类,它有静态字段即犯错和流出是类型PrintStream的和在被类型为InputStream因此
System.in
java.util.Scanner扩展java.lang.Object并实现以下接口:
现在我们理解了层次结构。 执行期间会发生什么?
Execution of > Scanner input = new Scanner(System.in)
构造一个新的Scanner对象,通过它传递它应该期望输入的源。
Execution of > input.next()
执行以下步骤
只要你提供一个输入(假设如下)
"Hello World! This is a test."
并按Enter键进行以下步骤
Iterator iterate = tokens.iterator()
的迭代器,以通过标记进行迭代 返回第一个完整标记的原因是因为这是从java.util.Iterator
继承的next()
方法的行为。 基本上把它看成一个指针,指向排列顺序排列的扫描器中的一堆令牌。 只要next()
被调用,返回第一个标记并将指针向前移动。
另一方面, hasNext()
返回true,如果此扫描程序具有来自迭代器指向的位置的另一个标记。 与next()
不同,它不会超过令牌。
该文档说明下面的内容()
查找并返回此扫描程序中的下一个完整标记。 完整的令牌前后有与分隔符模式匹配的输入。 即使先前调用hasNext()返回true,该方法也可能在等待输入进行扫描时阻塞。
链接地址: http://www.djcxy.com/p/96089.html
下一篇: Scanner next() throwing NoSuchElementException for some online compilers