![](/img/trans.png)
[英]What's the difference between next() and nextLine() methods from Scanner class?
[英]Understanding Scanner's nextLine(), next(), and nextInt() methods
我试图了解这三种方法的工作原理。 以下是我对它们的理解:
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”?
这是否意味着即使nextInt()
未读取第一行的转义字符,方法next()
也会读取下一行?
nextLine() 读取当前行的剩余部分,即使它是空的。
正确的。
nextInt() 读取一个整数但不读取转义序列“\n”。
正确1 。
next() 读取当前行但不读取“\n”。
不正确。 事实上, next()
方法读取下一个完整的标记。 这可能是也可能不是当前行的其余部分。 它可能会也可能不会消耗行尾,具体取决于行尾的位置。 javadoc 描述了准确的行为,您可能需要自己仔细阅读它才能完全理解其中的细微差别。
所以,在你的例子中:
nextInt() 调用使用了2
字符并将该位置留在NL
处。
next() 调用跳过NL
,消耗H
和i
,并将光标留在第二个 NL。
nextLine() 调用消耗了第二行的其余部分; 即NL
。
1 ...除了你的术语是错误的。 读取数据时,它不是转义序列。 它是一个行尾序列,可能由 CR、NL 或 CR NL 组成,具体取决于平台。 您正在谈论的转义序列在 Java 源代码中,在字符串和字符文字中。 它们可能 >> 代表 << CR 或 NL 或...其他字符。
如果你的输入是2 hello hi
nextInt() - 只需将下一个标记作为 int 读取(这里 - 它是2
)否则会出错
next() - 只需读取下一个标记,(这里 - 它是hello
)
nextline() - 它读取一行直到它换行(这里 - 在读取前2 hello
之后,下一个;nextline 读取hi
只是因为在那之后它找到了一个换行符)
如果输入是
2
Hi
Hello
nextInt,next 与上述讨论相同。
在 nextline() 中,它在完成 next() 读取的输入Hi
后找到换行符。 因此,nextline() 停止读取输入以获取换行符。
我试图了解这三种方法是如何工作的。 以下是我对它们的理解:
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”?
这是否意味着即使nextInt()
没有读取第一行的转义字符,方法next()
也会读取下一行?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.