2014-01-20 23 views
-1

说我有下面的代码的Java:如何在控制台程序中使用scanner.hasNextLine不按Ctrl + Z

Scanner scanner = new Scanner(System.in); 
while (scanner.hasNextLine()) { 
    line = scanner.nextLine(); 
    //do something 
    } 

而我在控制台输入的是这样的。

Wayne Rooney 
Luis Nani 
Shinji Kagawa 

我想逐行读这行。

但问题是hasNextLine块在第三行后等待输入的方法,因为键盘(System.in)的输入永远不会到达EOF。

现在,我只需按Enter键就可以达到EOF?因为我不想告诉用户按Ctrl + z来运行我的程序。

它是如何做的?有什么想法吗?

我正在寻找Java方面的解决方案,而不是控制台上的任何命令。

在此先感谢

+0

添加一个特殊的关键字(例如退出)。 – nhahtdh

+0

谢谢。但是,我不希望用户做任何事情,除了只是输入和按下输入。 – shazinltc

+1

问题是,程序不知道你是否完成,或者你想在按下输入后添加其他名称。 – XWaveX

回答

1

它是如何做的?:通常通过向用户显示消息并请求某些特殊字完成输入来完成。

public static void main(String[] args) throws IOException 
{ 
    Scanner scanner = new Scanner(System.in); 
    String line; 

    System.out.println("Enter names (\"QUIT\" to finish)"); 
    while (scanner.hasNextLine()) { 
     line = scanner.nextLine(); 
     if (line.equals("QUIT")) { 
      break; 
     } 
    } 
    // ... 
} 

在使用特殊字上面的例子是"QUIT",你当然会改变这更拨一个。

1

当你按两次回车键,你最终读一个空行。你可以测试这个:

while (scanner.hasNextLine()) { 
    line = scanner.nextLine(); 
    if (line.equals("")) 
     break; // this will exit the loop 
    //do something 
} 

现在,循环将结束,如果你按两次输入没有之间输入任何东西。

+0

谢谢,但正如我前面提到的,我想要一个不太侵入性的解决方案。我不希望用户做任何其他的事情,除了输入和输入 – shazinltc

+2

@shazinltc:那么没有其他办法。你需要以某种方式区分用户输入和信号到结束。 – nhahtdh

+0

你可以决定只处理最多3个名字,还有一种不同的方法可以做到这一点...... – tbodt

相关问题