在java中从命令行读取用户输入的正确方法

时间:2009-11-15 14:11:18

标签: java exception exception-handling iostream user-input

我希望能够从命令行读取用户输入的方式获得有关最佳实践和评论的一些意见。是否有推荐的方法,我是否正确使用try / catch块?

我的例子在这里运作良好,但仍然希望听到是否有一种“更清洁”的方式来做到这一点。非常感谢。例如,他是否需要在每个catch块中返回语句? 或者,我应该将我的逻辑(条件)放在try块中吗?

public class Client {

public static void main(String[] args) {
    begin();
}

private static void begin(){
    Machine aMachine = new Machine();
    String select=null;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while(aMachine.stillRunning()){
        try {
            select = br.readLine();
        } catch (IOException ioe) {
            System.out.println("IO error trying to read your selection");
            return;
        }catch(Exception ex){
            System.out.println("Error trying to evaluate your input");
            return;
        }

        if (Pattern.matches("[rqRQ1-6]", select)) {
            aMachine.getCommand(select.toUpperCase()).execute(aMachine);
        }
        /*
         * Ignore blank input lines and simply
         * redisplay options
         */
        else if(select.trim().isEmpty()){
            aMachine.getStatus();
        }
        else {                
            System.out.println(aMachine.badCommand()+select);
            aMachine.getStatus();
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

我通常更喜欢使用Scanner类从输入行读取。使用scanner类,您可以请求特定类型(double,int,...,string)。这也将为您进行验证测试。

我不建议以您的方式编写输入解析。捕获一个通用的Exception将捕获任何内容,来自MemoryError等。坚持使用特定的异常并从那里处理它们。如果输入与预期类型不匹配,扫描程序将通过InvalidInputException(或其他影响)。