правильный способ прочитать пользовательский ввод из командной строки в Java - PullRequest
0 голосов
/ 15 ноября 2009

Я надеялся получить некоторые мнения относительно лучших практик и комментарии о том, как я читаю пользовательский ввод из командной строки. Есть ли рекомендуемый способ сделать это, правильно ли я использую блоки try / catch?

Мой пример здесь работает нормально, но все равно хотелось бы услышать, есть ли «более чистый» способ сделать это. Большое спасибо. Например, нужны ли ему операторы возврата в каждом блоке catch? Или я должен поместить свою логику (условные выражения) в блок try?

Клиент публичного класса {

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 Ответ

1 голос
/ 15 ноября 2009

Я обычно предпочитаю использовать класс Scanner для чтения из строки ввода. С помощью класса сканера вы можете запрашивать определенные типы (double, int, ..., string). Это также сделает для вас валидационное тестирование.

Я бы не советовал писать разбор ввода так, как вы. Поймать универсальное Исключение поймает что угодно, от MemoryError и т. Д. Придерживайтесь определенных исключений и разбирайтесь с ними оттуда. Сканер выполнит исключение InvalidInputException (или что-то подобное), если ввод не соответствует ожидаемому типу.

...