input完成后如何终止扫描仪?

public static void main(String[] args) { Scanner scan = new Scanner(System.in); try { while (scan.hasNextLine()){ String line = scan.nextLine().toLowerCase(); System.out.println(line); } } finally { scan.close(); } } 

只是想知道如何在完成input后终止程序? 由于假设我要继续inputinput,扫描仪仍然会在几个“Enter”后继续…我试过:

 if (scan.nextLine() == null) System.exit(0); 

 if (scan.nextLine() == "") System.exit(0); 

他们没有工作….程序继续和原始意图混乱,

问题是,一个程序(像你的)不知道用户已经完成inputinput,除非用户……不知何故…告诉它。

有两种方式,用户可以这样做:

  • input“文件结束”标记。 在UNIX上(通常)是CTRL + D ,在Windows上是CTRL + Z。 这将导致hasNextLine()返回false

  • input一些被程序识别为“我已经完成”的特殊input。 例如,它可能是一个空行,或一些特殊的值,如“退出”。 该程序需要具体testing。

(你也可以想象使用一个计时器,并假设用户已经完成,如果他们没有input任何inputN秒,或N分钟,但这不是一个用户友好的方式来做到这一点。


当前版本失败的原因是您正在使用==来testing一个空string。 您应该使用equalsisEmpty方法。

其他要考虑的事项是区分大小写(例如“退出”与“退出”)以及前导或尾随空白(例如“退出”与“退出”)的效果。

string比较是使用.equals()而不是==

所以,试试scan.nextLine().equals("")

用这种方法,你必须明确地创build一个退出命令或退出条件。 例如:

 String str = ""; while(scan.hasNextLine() && !((str = scan.nextLine()).equals("exit")) { //Handle string } 

另外,你必须使用.equals()而不是==处理string等于大小写的情况。 ==比较两个string的地址,除非它们实际上是相同的对象,否则永远不会是真的。

你将不得不寻找特定的模式,这表明你的input结束,例如“##”

 // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); try { while (scan.hasNextLine()){ String line = scan.nextLine().toLowerCase(); System.out.println(line); if (line.equals("##")) { System.exit(0); scan.close(); } } } finally { if (scan != null) scan.close(); } 

在这种情况下,我build议你使用do,while循环而不是while。

  Scanner sc = new Scanner(System.in); String input = ""; do{ input = sc.nextLine(); System.out.println(input); } while(!input.equals("exit")); sc.close(); 

为了退出程序,你只需要分配一个string头,例如退出。 如果input等于退出,则程序将退出。 此外,用户可以按Ctrl + C退出程序。

您可以检查控制台的下一行input,并检查您的终止条目(如果有的话)。

假设你的终止条目是“退出”,那么你应该试试这个代码: –

 Scanner scanner = new Scanner(System.in); try { while (scanner.hasNextLine()){ // do your task here if (scanner.nextLine().equals("quit")) { scanner.close(); } } }catch(Exception e){ System.out.println("Error ::"+e.getMessage()); e.printStackTrace(); }finally { if (scanner!= null) scanner.close(); } 

试试这个code.Your终止线应该由你input,当你想closures/终止扫描仪。