Scanner的问题 - Java

时间:2011-04-25 23:55:54

标签: java java.util.scanner

我正在尝试读取包含多个单词的字符串,即。洛杉矶或纽约市。对于“离开”和“到达”使用scanner.next()只读取第一个如果有两个单词并在变量之间拆分它们。 nextLine()也没有太大的运气。这是我的代码:

            System.out.print("\nEnter flight number: ");
            int flightNumber = Integer.valueOf(scanner.nextLine());
            System.out.print("\nEnter departing city: ");
            String departingCity = scanner.nextLine();
            System.out.print("\nEnter arrival city: ");
            String arrivalCity = scanner.nextLine();

我知道这很简单,但我还没弄清楚。

这是输入/输出w /上面的代码:

输入航班号:29

输入离开城市:(立即跳到下一行)

输入抵达城市:

----我真正想要的是什么----

输入航班号:29

进入离开城市:洛杉矶(能够在不跳过下一个输入的情况下输入多个单词)

进入抵达城市:堪萨斯城

2 个答案:

答案 0 :(得分:6)

你的问题是next()没有读取回车符,它会被你的下一个next()或nextLine()自动读取。始终使用nextLine()并将输入转换为整数:

public static void main(String[] args) throws Exception {
    Scanner scanner = new Scanner(System.in);
    System.out.print("\nEnter flight number: ");
    int flightNumber = Integer.valueOf(scanner.nextLine());
    System.out.print("\nEnter departing city: ");
    String departingCity = scanner.nextLine();
    System.out.print("\nEnter arrival city: ");
    String arrivalCity = scanner.nextLine();

}

答案 1 :(得分:0)

Integer.parseInt(scanner.nextLine())也可以 - 它会返回一个int,而Integer.valueOf(scanner.nextLine())会返回一个Integer

作为@Edwin Dalorzo建议的替代方案,您可以调用nextInt()从输入流中获取下一个标记try to convert it to an int。如果转换为int不成功,则此方法将抛出InputMismatchException。否则,它将仅获取输入的int值。调用nextLine(),然后将获取在int之后的行中输入的任何其他内容。此外,当用户按下“输入”提交输入时,nextLine()消耗添加的换行符(它将超过它并将其丢弃)。

如果您想确保用户在按“Enter”之前没有输入之外的任何内容,请先调用nextInt(),然后确保{{1}的值}} 是空的。如果你不关心int之后在行中输入的任何内容,你可以忽略nextLine()返回的内容,但是仍然应该调用该方法来使用换行符。

在StackOverflow中搜索“java scanner next”或“java scanner nextLine”以查找有关此主题的主题。