Java - 如何从用户那里获取未确定数量的输入

时间:2010-11-15 00:54:49

标签: java user-input

Java问题:

我想从用户那里获取一定数量的输入行。例如,我希望用户继续输入人名作为字符串,直到用户没有其他名字输入。我想要一种用户友好的方式来轻松指示用户没有更多输入。循环可能如下所示。有什么好主意吗?任何有关改进代码片段的提示也会受到赞赏。

 BufferedReader read = new BufferedReader(new InputStreamReader(System.in));     

 while( <user still has more input> ) {
      System.out.println("Enter name: ");
      String s = read.readLine();
      ...
      <do something with s>;
      ...
 }
谢谢你!

3 个答案:

答案 0 :(得分:2)

您需要一个不是名称但不再显示数据的值。空行会很好。您还想查询他们是否真的想要退出,因此如果他们意外地返回,他们并没有丢失所有数据。

name = read.readLine(); 
Pattern p = Pattern.compile("^\\s$"); //empty line or one of just space chareacters
if (p.matcher(name).matches()) {
       System.out.println("Are you done?[y/n]");
       if (Pattern.matches("[yY]", read.readLine()) {
          //quit your loop
       }
}

答案 1 :(得分:0)

一种简单的方法是让用户在完成后输入空行。您只需检查是line.equals("")还是之前修剪它。

答案 2 :(得分:0)

您可以拥有一个布尔变量,例如finished,并检查用户是否输入'Q'或其他项目以表明它们已完成。如果是这样,请将finished设置为true,然后在下一次迭代时退出循环。

这是一个简单的例子,

boolean finished = false;
String name = null;  // initialized to a default value.

System.out.println("Enter 'Q' to quit");
while(!finished) {
System.out.println("Enter name: ");
name = read.readLine();  // moved declaration outside of loop
if(name.equals("Q")) { 
   finished = true;
 }
  // do work with name
}

我还修改了你的代码,

  • 我已向用户添加了一条消息,指示输入的终止。
  • 我已将变量s重命名为更有意义的内容,因为您正在存储用户的名称将其更改为name似乎是合理的。
  • 作为习惯的力量,我还使用默认值初始化了变量,因此我将name变量分配给null。并非完全必要,但我认为这是一种很好的做法。
  • 由于我已为name分配了默认值,因此我已将其移至您的循环之外。