读取整数和双读后如何读取整个字符串?

时间:2016-05-23 20:15:09

标签: java string

所以我有以下输入:

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();

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

3 个答案:

答案 0 :(得分:8)

nextLine()有点令人困惑。它不会提供 next 行,但会在它遇到的下一个换行符之前读取。

在您调用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();

答案 1 :(得分: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();

答案 2 :(得分: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();