Java扫描器字符串输入

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (56)

我正在编写一个使用Event类的程序,该类中包含一个日历实例和一个String类型的描述。创建事件的方法使用扫描仪获取月,日,年,小时,分钟和描述。我遇到的问题是Scanner.next()方法只返回空格前的第一个单词。所以如果输入是“我的生日”,那么该事件的描述就是“我的”。

我做了一些研究,发现人们在这个问题上使用了Scanner.nextLine(),但是当我尝试这个时,它只是跳过了输入的位置。这是我的一段代码的样子:

System.out.print("Please enter the event description: ");
String input = scan.nextLine();
e.setDescription(input);
System.out.println("Event description" + e.description);
e.time.set(year, month-1, day, hour, min);
addEvent(e);
System.out.println("Event: "+ e.time.getTime());    

这是我得到的结果:

Please enter the event description: Event description
Event: Thu Mar 22 11:11:48 EDT 2012

它跳过空格输入描述字符串,因此,描述(最初设置为空格 - “”)不会改变。

我怎样才能解决这个问题?

提问于
用户回答回答于

当你在年份月份的day day分钟读入nextInt()时,它会在解析器/缓冲区中留下其余的行(即使它是空白的),所以当你调用nextLine()时,你正在读取第一行的其余部分。

我建议你在打印下一个提示之前先调用scan.nextLine()以放弃该行的其余部分。

用户回答回答于

当你在年份月的日子时间里读到类似的东西时,nextInt()会留下解析器/缓冲区中的其余部分(即使它是空的),所以当你打电话给nextLine()你时,你正在阅读第一行的其余部分。

我建议你使用,scan.next()而不是scan.nextLine()

扫码关注云+社区