读取整数和双读后如何读取整个字符串? [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

所以我有以下输入:

3
3.0
How are you doing

我需要将它们存储到以下变量中:

int myInt
double myDouble
String myString

这是我尝试过的:

myInt = scan.nextInt();
myDouble = scan.nextDouble();
myString = scan.nextLine();

这适用于整数和Double值,但String给了我一个NULL值。

然后我尝试了这个:

myInt = scan.nextInt();
myDouble = scan.nextDouble();
myString = scan.next();

它再次适用于前两个,但字符串只保留第一个字。我怎样才能读完整个字符串?我需要设置循环吗?

java string
3个回答
8
投票

nextLine()有点令人困惑。它没有给你下一行,但会读到它遇到的下一个换行符。

在调用nextDouble()之后,扫描仪位于3.0之后但在新行之前,因此nextLine()读取到该行的末尾并给出一个空结果。

您可以使用skip(String)3.0之后跳过换行符,或者只是调用nextLine()一次并扔掉它:

myInt = scan.nextInt();
myDouble = scan.nextDouble();
scan.nextLine(); // Skip the remainder of the double line
myString = scan.nextLine();

0
投票
myInt = scan.nextInt();
myDouble = scan.nextDouble();

而不是使用scanner给你double and int使用nextLine()并手动投射。 scanner不会进入问题的下一行。

 myInt = Integer.parseInt(scan.nextLine());
 myDouble = Double.parseDouble(scan.nextLine());
 myString = scan.nextLine();

0
投票

当您调用nextDouble方法时,它会读取一个double值并相应地前进扫描仪。因此,当您调用nextDouble时,您的扫描仪将在值3.0之后但在下一行字符之前。现在,当你调用nextLine()方法时,它会使扫描程序前进,直到它到达下一个下一行字符并返回进行推进时读取的内容。由于您的扫描仪正好位于下一行字符之前,因此当您调用nextLine()方法时,扫描程序会立即触及下一行字符而不会读取任何内容。因此,您的nextLine()方法返回null。

如果您的输入值在每行中,您可以遵循@Priyamal的建议,或者您可以在myString = scan.nextLine()之前再插入一个nextLine()方法调用。因此,获取输入的代码如下所示:

myInt = scan.nextInt();
myDouble = scan.nextDouble();
scan.nextLine();
myString = scan.nextLine();
© www.soinside.com 2019 - 2024. All rights reserved.