我正在尝试理解这三种方法的工作原理。这是我理解它们的方式:
nextLine()
读取当前行的剩余部分,即使它是空的。nextInt()
读取一个整数,但不读取转义序列 "\n"。next()
读取当前行,但不读取 "\n"。
假设我有以下代码:
import java.util.Scanner;
public class Welcome2
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Next enter two words:");
int n;
String s1, s2;
n = keyboard.nextInt();
s1 = keyboard.next();
s2 = keyboard.nextLine();
System.out.println(" n is " + n + " s1 is " + s1 + " s2 is " + s2);
}
}
如果我的输入是:
2
Hi
Hello
然后我在屏幕上得到以下输出:
n is 2
s1 is hi
s2 is
为什么s1
的值会是"HI"?
这是否意味着next()
方法读取了下一行,即使第一行的转义字符尚未被nextInt()
读取?
next()
不是读取当前行,而是读取下一个 token。你是如何输入 "2 Hello Hi" 的?如果你按了两次回车,在输入 "Hi" 之前程序就会结束... - Jon Skeetnext
尝试读取标记,而不是行。你需要知道的是,在该标记之后,它不会消耗行分隔符,但它将能够消耗和跳过放置在其前面的任何行分隔符。例如,假设|
是扫描仪的光标,并且它位于文本2|\r\nfoo\r\nbar
中。如果调用next()
,它将读取\r
\n
,最后找到foo
。它还将读取下一个字符\r
以检查此标记的结束位置,但它不会消耗它(导致nextLine
消耗它并返回空字符串)。 - Pshemo