2012-07-25 80 views
3

我正在使用扫描仪在java中接受用户输入。当我使用nextInt()并且用户输入“2 5”时,则赋值“2”并丢弃5。如果我想要显示这样的输入是错误的呢? 我想到的一个解决方案是我可以使用nextString()而不是nextInt(),然后按照我的出路工作。但任何人都可以提出更好的解决方案吗?扫描仪和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();   
} 
} 
+1

'nextInt()'将读取一个'int'。如果你想读另一个,请再次调用它。 – nhahtdh 2012-07-25 05:23:47

+0

这不应该发生。你能否也发布代码片段?你有没有尝试再次调用nextInt()? – SiB 2012-07-25 05:24:58

回答

8

首先使用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

但是,如果有两个整数键入空格作为分隔符,parseInt将永远失败。我们需要分割从nextLine()获得的字符串。即我们应该在分割字符串之后才进行解析,否则在上述情况下总会抛出一个错误“它不是有效的整数”。 – sakthisundar 2012-07-25 05:55:30

+1

我已经根据问题给出了答案,那就是如何验证由空格分隔的单个或一对数字。考虑15是一个整数,用空格作为分隔符来书写“1 5”作为分隔符会认为1和5是两位数字,但用户并不想这样...... – 2012-07-25 06:01:44

+1

作为一个小建议:使用Apache Commons StringUtils .isNumeric(字符串);这将告诉你,如果字符串是事实上一个有效的数字。恕我直言,这种方式使用例外是有点丑陋。 – 2012-07-25 10:19:44

0

使用readLine()BufferedReader。您将收到一个String,其中包含用户输入为Enter的所有内容。从那里,你可以做你想要的输入,并检查它是否符合你的预期格式。

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); 
+1

我不会向任何Java新手推荐String.split()。由于分裂论证是一个正则表达式,在短时间内他将会再次忘记这一事实,您将直接将他带到未来某个地方的下一批问题中。 – Bananeweizen 2012-07-25 05:28:59

+2

正则表达式非常强大:更快地找到它们比以后更快。此外,新手程序更易于调试 - 如果您的第一个正则表达式错误出现在5000行程序中,则会更加困难。 – GKFX 2013-08-27 11:24:21

+0

松散相关:http://programmers.stackexchange.com/questions/223634/what-is-meant-by-now-you-have-two-problems – 2016-03-08 16:17:33