2012-09-12 62 views
1

我的程序将在“commandparameter”的形式在它们之间具有空间读取用户的键盘命令。它继续执行单个命令,直到下一个命令是“exit”。此外,如果用户弄乱了,程序应该显示一个错误,但继续要求命令(一个功能,我不认为我已经完成)..连续输入命令

在下面的代码实现这一点的好办法?它可以处理用户只需按下回车键W/O命令,垃圾输入等?如果有的话,我想知道是否有更好的惯用方式来实现这一点。

String command = ""; 
String parameter = ""; 
Scanner dataIn = new Scanner(System.in); 

while (!command.equals("exit")) { 
    System.out.print(">> "); 

    command = dataIn.next().trim(); 
    parameter = dataIn.next().trim(); 
    //should^these have error handling? 

    if (command.equals("dothis")) { 
     //do this w/ parameter.. 
    } else if (command.equals("dothat")) { 
     //do that w/ parameter.. 
    } //else if... {} 
     else { 
     system.out.println("Command not valid."); 
    } 
} 

System.out.println("Program exited by user."); 

注:我把这个班没有什么异常处理是一个单一的概念,所以在这方面的任何指针是极大的赞赏:)

+0

一张小纸条:你应该总是()'之前调用做出'dataIn.hasNext调用'dataIn.next()'以确保未来'()'是一个有效的呼叫。典型地,该环头'而(dataIn.hasNext())'或'而(dataIn.hasNextLine())'解析时输入命令。 – 2012-09-12 22:10:53

+0

所以'而(!command.equals( “退出”)&& dataIn.hasNextLine())'? – James

回答

0

这是实现输入回路的简单方法:

Scanner sc = new Scanner(System.in); 

for (prompt(); sc.hasNextLine(); prompt()) { 

    String line = sc.nextLine().replaceAll("\n", ""); 

    // return pressed 
    if (line.length == 0) 
     continue; 

    // split line into arguments 
    String[] args = line.split(" ");  

    // process arguments 
    if (args.length == 1) { 
     if (args[0].equalsIgnoreCase("exit")) 
      System.exit(0); 
     if (args[0].equalsIgnoreCase("dosomething")) 
      // do something 
    } else if (args.length == 2) { 
     // do stuff with parameters 
    } 
} 

假设prompt()在此处打印出提示。

+0

会提示()仅仅是'的System.out.println( “>>”);'? – James

+0

差不多。这将是'System.out.print(“>>”);' – 2012-09-12 22:38:09

+0

正确。另外为什么参数[]是长度1而不是2?不应该分割返回参数[0]和参数[1]? – James