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。 您应该使用equals
或isEmpty
方法。
其他要考虑的事项是区分大小写(例如“退出”与“退出”)以及前导或尾随空白(例如“退出”与“退出”)的效果。
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/终止扫描仪。