2009-11-15 3 views
4

Я использую класс сканера для захвата ввода пользователем из командной строки (только строки) в качестве альтернативы моему предыдущему question.Как поймать пустой ввод со сканирующим классом в java

Следующее, кажется, работает нормально, за исключением того, что пустые строки не пойманы, как следует из второго условного. Например, когда я нажимаю enter, это должно быть записано как пустая строка, а второе условие должно быть истинным. Однако вся новая пустая строка отображается на консоли каждый раз, при этом вся консоль «прокручивается» вверх, если я продолжаю входить, а не логику условного.

Есть ли способ поймать пустой ввод из командной строки с помощью сканера? (Кто-то бил только войти, или ударить пространство в несколько раз, а затем ввести)

Спасибо за любые советы

Machine aMachine = new Machine(); 
String select; 
Scanner br = new Scanner(System.in); 
while(aMachine.stillInUse()){ 
    select = br.next(); 
     if (Pattern.matches("[rqRQ1-6]", select.trim())) { 
     aMachine.getCommand(select.trim().toUpperCase()).execute(aMachine); 
     } 
     /* 
     * Ignore blank input lines and simply 
     * redisplay current status -- Scanner doesn't catch this 
     */ 
     else if(select.trim().isEmpty()){ 
     aMachine.getStatus(); 

     /* 
     * Everything else is treated 
     * as an invalid command 
     */ 
    else {     
      System.out.println(aMachine.badCommand()+select); 
      aMachine.getStatus(); 
     } 
    } 
+0

Я также надеялся спросить, если это правильный способ чтения пользовательского ввода из командной строки. Какое общее упражнение я должен обрабатывать, например? Спасибо за любые объяснения. – denchr

+0

Чтобы быть в курсе, ни один из этих кодов не будет читаться из командной строки - ваши аргументы находятся в аргументах main(). Но вы говорите о стандартном вводе. –

ответ

1

Scanner является реализация «для чайников» из файла ввода/вывода для ввода. Это позволяет учебникам и учебникам писать демо-код, не застонав о его осложнениях.

Если вы действительно хотите знать, что вы читаете, вы должны сказать что-то вроде

BufferedReader br = new BufferedReader(new FileReader("myfile.txt")) 

... и после этого вы можете сделать

String line = br.readLine() 

и не видят ничего, кроме правды ,

+0

Ну, я немного сомневаюсь в том, к какой реализации нужно идти. В другом сообщении, которое я связываю выше, сканер оценивается с использованием BufferedReader (новый InputStreamReader (System.in)); – denchr

+1

Хорошо сканер лучше с точки зрения простоты. Это хуже с точки зрения мелкозернистого контроля. –

0

select = br.next();

... блокирует, пока не найдет подходящий токен. Это означает, что он будет ждать, пока он увидит маркер, чтобы возвратиться, поэтому вы не получите пустую строку от него.

Попробуйте заменить эти строки:

//select = br.next(); // old version with Scanner 

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 
try { 
    select = bufferedReader.readLine(); 
} catch (IOException e) { 
    throw new RuntimeException(e); 
} 
System.out.println(">" + select + "<"); // should be able to see empty lines now... 
Смежные вопросы