문제

스캐너 클래스를 사용하여 이전의 대안으로 명령 줄 (문자열 만)에서 사용자 입력을 캡처합니다. 의문.

빈 선이 두 번째 조건부에 의해 필요한대로 잡히지 않는 것을 제외하고 다음은 잘 작동하는 것 같습니다. 예를 들어 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();
        }
    }
도움이 되었습니까?

해결책

Scanner 입력을위한 파일 I/O의 "Dummies 용"구현입니다. 이를 통해 튜토리얼 및 교과서 작성자는 합병증에 대해 신음하지 않고 데모 코드를 작성할 수 있습니다.

당신이 읽고있는 것을 정말로 알고 싶다면

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

... 그리고 당신은 할 수 있습니다

String line = br.readLine()

그리고 진실 만보십시오.

다른 팁

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...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top