我试图了解这三种方法的工作原理。以下是我理解他们的方式:
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()
尚未读取第一行的转义字符?
答案 0 :(得分:5)
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或......其他字符。
答案 1 :(得分:2)
如果您输入的是2 hello hi
nextInt() - 只需将下一个标记作为int读取(此处 - 它是2
)否则会出错
next() - 只需阅读下一个标记,(此处为hello
)
nextline() - 它读取一行直到它获得换行符(此处 - 读取nextInt输入的上一个2 hello
后,next; nextline读取hi
只是因为之后它找到换行符)
如果输入
2
Hi
Hello
nextInt,下面的讨论也是如此。
在nextline()中,它在完成next()读取的输入Hi
后找到换行符。因此,nextline()停止读取输入以获取换行符。
答案 2 :(得分:-1)
这是否意味着方法next()读取下一行,即使nextInt()没有读取第一行的转义字符?
否强>
next()
无法读取下一行,它只会在空格之前读取内容。
当keyboard.nextLine()
执行时,它会消耗第一个输入中仍在缓冲区中的“行尾”。
输入数字然后按Enter键,keyboard.nextInt()
仅消耗数字,而不是“行尾”。
使用next()只会返回空格之前的内容。 nextLine() 返回当前行后自动将扫描仪向下移动。