Java Scanner字符串输入

时间:2011-05-11 15:17:59

标签: java string java.util.scanner

我正在编写一个使用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

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

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:17)

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

我建议您在打印下一个提示之前调用scan.nextLine()来丢弃剩下的行。

答案 1 :(得分:3)

当您使用类似nextInt()的内容读取年月日时分钟时,它会在解析器/缓冲区中留下其余部分(即使它是空白的),因此当您致电nextLine()时阅读第一行的其余部分。

我建议您使用scan.next()代替scan.nextLine()

答案 2 :(得分:0)

    Scanner ss = new Scanner(System.in);
    System.out.print("Enter the your Name : ");
    // Below Statement used for getting String including sentence
    String s = ss.nextLine(); 
   // Below Statement used for return the first word in the sentence
    String s = ss.next();

答案 3 :(得分:0)

如果在nextInt()方法之后立即使用nextLine()方法,则nextInt()读取整数标记;因此,该整数输入行的最后一个换行符仍在输入缓冲区中排队,下一个nextLine()将读取整数行的其余部分(为空)。因此我们读取可以读取空白空间的另一个字符串可能会起作用。检查以下代码。

导入java.util.Scanner;

公共类解决方案{

{"path" : [
    {"position" : { "x": "1111", "y" : "2222"}, "orientation" : { "x":"0"} },
{"position" : { "x": "1111", "y" : "2222"}, "orientation" : { "x":"0"} }
]}

}

答案 4 :(得分:0)

在扫描字符串之前使用它清除先前的键盘缓冲区 它将解决您的问题 Scanner.nextLine(); //这是清除键盘缓冲区

答案 5 :(得分:0)

import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int i = scan.nextInt();
        Double d = scan.nextDouble();
        scan.nextLine();
        String s = scan.nextLine();
        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}