3

我正在使用 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();        
}
}
4

3 回答 3

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");
}
于 2012-07-25T05:31:33.340 回答
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);
于 2012-07-25T05:26:14.423 回答
0

使用readLine()BufferedReader. 您将获得一个String包含用户输入到 Enter 的所有内容。从那里,您可以对输入做您想做的事情,并检查它是否符合您预期的格式。

于 2012-07-25T05:25:02.573 回答