2017-12-03 41 views
2

我想用扫描仪只读一行(用空格分隔)从控制台读取多个变量。在一行中用扫描仪读取多个变量

如果I型:

int hight = Integer.parseInt(reader.nextLine()); 
int width = Integer.parseInt(reader.nextLine()); 
int depth = Integer.parseInt(reader.nextLine()); 

然后显示我的数字(例如1,2,3)是这样的:

1 
2 
3 

,但我希望它显示我的号码一样, :1 2 3

有人能帮助我吗?要做到这一点

+0

这里没有代码显示任何东西 - 请说明你的意思究竟是什么? –

+0

如果你想要Int,而不是为什么你首先在String中读取并将它转换为int –

+1

[Java从一行读取多个int的可能的重复](https://stackoverflow.com/questions/23506429/java-reading-multiple -int-a-one-line) – Raghu

回答

2

一种方法是使用nextInt,而不是nextLine

int hight = reader.nextInt(); 
int width = reader.nextInt(); 
int depth = reader.nextInt(); 

然后你输入可以是这样的:

1 2 3 

请注意,你必须按之前输入的所有三个号码ENTER,否则您的输入看起来就像这样再次:

1 
2 
3 

另一种方式做,这是使用正则表达式来指定您希望您的输入是在正确的格式,呼吁nextLine和匹配用户输入的正则表达式模式的行:

Matcher matcher = Pattern.compile("(\\d+)\\s+(\\d+)\\s+(\\d+)").matcher(reader.nextLine()); 
if (matcher.matches()) { 
    int height = Integer.parseInt(matcher.group(1)); 
    int width = Integer.parseInt(matcher.group(2)); 
    int depth = Integer.parseInt(matcher.group(3)); 
} else { 
    // input was invalid! 
} 
+0

从来不知道匹配器可以像这样使用。TIL匹配器的新用途。 +1 – Raghu

0

要在一行中输入所有3个值,您可以使用。 三次而不是使用.readNextLine()。这样,你可以把你的输入像这样1 2 3,并在键盘上按下Enter(这是默认用于结束输入),你会得到你所要求的。

如果你的目的是为了得到一个行,而不是多一个输出,你应该使用方法印刷的其他版本到控制台:

System.out.print(height + " " + weight + " " + depth) 

System.out.println()打印其参数的下一行字,System.out.print()没有。

+0

不回答问题。 – Harsh

+0

后来在他的问题中,他谈到了展示这些价值观,我认为这可能会有所帮助。那好吧,我正在编辑我的答案,并希望你重新考虑downvote。 –

+1

是的,我的坏,请编辑,我会删除downvote。另外,你能否特别指出你正在回答问题的第二部分。 – Harsh

0

根据你的评论,你可以简单地读取数字像整数:

Scanner br =new Scanner(System.in); 
    int a=br.nextInt(); 
    int b=br.nextInt(); 
    int c=br.nextInt(); 

给输入为1 2 3