Scanner和nextInt丢弃整数

时间:2012-07-25 05:21:50

标签: java input

我正在使用Scanner在java中获取用户输入。当我使用nextInt()并且用户输入“2 5”时,则分配值“2”并丢弃5。如果我想显示这样的输入是错误怎么办? 我想到的一个解决方案是,我可以使用nextString()而不是nextInt()然后解决问题。但是,有人可以提出更好的解决方案吗?

我意识到它不会丢弃空格后的整数,而是将它用于下一个输入。

import java.util.Scanner;
class Test{
static Scanner in=new Scanner(System.in);
static void trial(){
    int k=in.nextInt();
    System.out.println(k);
    System.out.println(k);
}

public static void main(String[] args){     
    int k=in.nextInt();
    System.out.println(k);
    System.out.println(k);
    trial();        
}
}

3 个答案:

答案 0 :(得分:8)

1。首先使用nextLine() 阅读整行。

2。使用Integer.parseInt()方法验证整数输入

<强>例如

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();

try{
    Integer.parseInt(s);
}
catch(NumberFormatException ex){
    System.out.println("Its not a valid Integer");
}

答案 1 :(得分:2)

就个人而言,我建议一次读取该行,并使用String.split()来解析单个“单词”:

  

http://pages.cs.wisc.edu/~hasti/cs302/examples/Parsing/parseString.html

     

我们希望将一个短语分成空格所用的单词   单词。例如

the music made   it   hard      to        concentrate
  

在这种情况下,我们只有一个分隔符(空格)和连续的   分隔符(即连续的几个空格)应视为一个   分隔符。要用Java解析这个字符串,我们

String phrase = 
  "the music made   it   hard      to        concentrate"; 
String delims = "[ ]+"; 
String[] tokens =  phrase.split(delims);

答案 2 :(得分:0)

使用BufferedReader中的readLine()。您将获得一个String,其中包含用户输入的所有内容。从那里,您可以使用输入执行所需操作,并检查它是否符合您预期的格式。