2017-02-07 3 views
0

:Ctrl + d를 누른 경우 표준 입력으로 테스트 할 수 있습니까? 나는 다음과 같은 루프를 사용하여 표준 입력에서 읽고 있어요

Scanner stdin = new Scanner(System.in); 

while (stdin.hasNextLine() && stdin.nextLine() != null) { 

     String line = stdin.nextLine(); 

     if (!(line.contains("#"))) { 
      input.add(line); 
     } 

     if (line.contentEquals("q")) { 
      break; 
     } 

} 

지금 이것은 단순히 q하고 Enter 키를 누릅니다 경우 사용자가 Ctrl + d를 누를 때, 그러나 나는 프로그램을 종료하기로되어있어 입력 종료하기 쉽습니다 새 줄에. 나는 이것을 누를 때 Ctrl + d을 눌러도 아무 일도 일어나지 않습니다.

답변

0

hasNextLine()hasLine()은 사용자가 "enter"를 입력 할 때까지 기다리는 것이 문제입니다.

Ctrl-D가 입력되지 않습니다.

예를 들어, "문자별로"이동하는 방법을 조사해야합니다.

scanner.next() 대신 유용한 정보가 반환됩니다.

그 외에도 상황은 훨씬 복잡합니다 (예 : here 참조).

따라서 실제 도움이되지는 않지만 실제로는 자바 스캐너와 "Ctrl-something"키 입력이 가장 친한 친구는 아닙니다.

대신 curses 같은 기능을 제공하는 라이브러리를 살펴볼 수 있습니다.

+0

while 조건을 while (stdin.next()! = null)으로 변경하면 'Ctrl + d'에 'NoSuchElementException' 예외가 발생합니다. – Alk

+0

표준에서 읽기 위해 사용할 수있는 다른 방법이 있습니까? 스캐너 대신 입력 하시겠습니까? – Alk

+0

그래서 기본적으로 그 예외를 잡아야하고 모든 입력이 공급되었을 때 그것을 가정해야합니까? – Alk

관련 문제