자바에서 스캐너 클래스로 빈 입력을 잡는 방법
-
20-09-2019 - |
문제
스캐너 클래스를 사용하여 이전의 대안으로 명령 줄 (문자열 만)에서 사용자 입력을 캡처합니다. 의문.
빈 선이 두 번째 조건부에 의해 필요한대로 잡히지 않는 것을 제외하고 다음은 잘 작동하는 것 같습니다. 예를 들어 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...
제휴하지 않습니다 StackOverflow