如何使用Scanner类使.next()在最后一个打印语句后接下一个单词?

时间:2017-07-22 05:24:34

标签: java input

例如,如果我写这段代码:

Scanner scnr = new Scanner(System.in);  
System.out.println("enter your favorite color");  
String age = scnr.next();  
System.out.println("now enter your birth month");  
String month = scnr.next();  

如果我回答“输入你最喜欢的颜色”,主要是“蓝色”,那么它会在年龄中存储“蓝色”,而在“月份”中存储“大部分”。我不希望这样。我希望它只扫描最后一个打印语句后的所有内容。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

这看起来非常适合Console#readLine方法。此方法打印提示,等待用户输入,然后将该输入作为String返回。

代码示例

String color = System.console().readLine("enter your favorite color: ");
String month = System.console().readLine("now enter your birth month: " );
System.out.println("color: " + color);
System.out.println("month: " + month);

运行示例

enter your favorite color: blue mostly
now enter your birth month: March
color: blue mostly
month: March

这比使用Scanner和类似类手动解析输入更容易。

如果您只想保留用户在提示符下输入的第一个单词,那么您可以使用String#split方法和匹配空格的正则表达式将其拆分为多个{{1}的数组元素。然后,您可以选择第一个(元素0)并丢弃其余部分。

代码示例

String

运行示例

String color = System.console().readLine("enter your favorite color: ");
String month = System.console().readLine("now enter your birth month: " );
System.out.println("color: " + color.split("\\s+")[0]);
System.out.println("month: " + month.split("\\s+")[0]);

对于对同一正则表达式进行大量重复评估的代码,有用的优化可以是使用Pattern将正则表达式编译为Pattern#compile对象。 (有关使用的更多详细信息,请参阅enter your favorite color: blue mostly now enter your birth month: March color: blue month: March JavaDocs。)