2009-11-15 5 views
4

이전 question의 대안으로 스캐너 클래스를 사용하여 명령 줄 (문자열 만)에서 사용자 입력을 캡처하고 있습니다.자바에서 스캐너 클래스로 빈 입력을 잡는 방법

두 번째 조건부에 따라야하는 것처럼 공백 행이 잡히지 않는다는 점을 제외하면 다음과 같이 잘 작동하는 것처럼 보입니다. 예를 들어 엔터 키를 누르면 공백 행으로 캡처되고 두 번째 조건은 참이어야합니다. 그러나 새로운 빈 줄이 매번 콘솔에 표시되며, 조건부 논리 대신 입력을 계속하면 전체 콘솔이 "위로 스크롤"됩니다.

scanner를 사용하여 명령 줄에서 빈 입력을 잡는 적절한 방법이 있습니까?

가 어떤 조언

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()의 args에 있습니다. 하지만 당신은 표준 입력에 대해 이야기하고 있습니다. –

답변

1

Scanner 주셔서 감사합니다 (사람이 입력 단지 타격, 또는 명중 공간을 몇 번 한 후 입력하는) 입력의 I/O 파일의 "에 대한 인형"구현입니다. 그것은 자습서 및 교과서 작가가 그것의 합병증에 대해 신음하지 않고 데모 코드를 작성할 수 있습니다.

당신이 정말로 당신이 읽고있는 것을 알고 싶은 경우에

, 당신은 뭔가 같은

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

말을 가지고 ... 그리고 당신은

String line = br.readLine() 

을하고 진실만을 볼 수 있습니다 .

+0

글쎄, 어떤 구현을해야할지 불확실하다. 위에서 링크 한 다른 게시물에서 스캐너는 BufferedReader (새로운 InputStreamReader (System.in))를 사용하여 칭찬됩니다. – denchr

+1

Well Scanner는 단순성 측면에서 더 좋습니다. 세밀한 제어 측면에서 더 나쁩니다. –

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... 
관련 문제