09
20

EOF란 End of File로 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타내는 용어다.

입력 값을 얼만큼 받는지 명시하지 않는 알고리즘 문제를 푸는 경우 EOF를 사용하게 된다.

 

 

Scanner의 경우 

= hasNext()를 사용

Scanner scan = new Scanner(System.in);
		
while(scan.hasNext()) {
  System.out.println(scan.nextLine());
}

 

BufferedReader의 경우 

EOF를 처리하는 내장 함수가 없기 때문에 아래와 같이 처리하게된다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";

/*1번째 방법 : 입력 자체가 파일인 경우 정상적으로 작동하지만 
* IDE에서는 EOF를 찾지 못해 프로그램이 끝나지 않는다
*/

while((str = br.readLine()) != null) {
 
}

/* 2번째 방법 : 1번째 방법에 더해 입력 끝에 enter를 한 번 더 입력하면
* 그 입력을 EOF로 판별해서 처리한다
*/

while((str = br.readLine()) != null && str.isEmpty()) {
 
}

/* 3번째 방법 : IDE에서는 enter로 EOF를 찾을 수 있지만
* 입력 자체가 파일로 들어온다면 런타임에러가 뜬다 (읽을 라인이 없는데 읽은 후에 equals()를 수행하기 때문)
*/

while((str = br.readLine()).equals("")) {
 
}

(참고:  https://gre-eny.tistory.com/307)

COMMENT