例如,如果我写这段代码:
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();
如果我回答“输入你最喜欢的颜色”,主要是“蓝色”,那么它会在年龄中存储“蓝色”,而在“月份”中存储“大部分”。我不希望这样。我希望它只扫描最后一个打印语句后的所有内容。有没有办法做到这一点?
答案 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。)