Scanner 클래스 사용법 정리

‍박소연·2025년 4월 16일

Scanner 클래스는 대부분 token(공백문자 = Spacebar, Tab, Enter로 구분) 단위로 데이터를 읽는다

  • 공백까지도 입력값과 함께 버퍼에 저장한다.

1. Scanner 클래스의 메서드 사용법

메서드기능
next()String, 띄어쓰기 뒷 부분은 읽지 않음
nextLine()String, 띄어쓰기를 포함하여 한 줄(Enter 치기 전까지)을 읽음

iterator 인터페이스의 메서드

iterator에 추가적인 요소가 있을 때 가져오는 역할

메서드기능
hasNext()boolean 타입 반환, 반복할 요소들이 남아 있다면 true를 없다면 false를 반환한다.
Next()매개변수 혹은 iterator 되는 타입, 반복할 다음 요소를 그대로 반환한다. 반복할 요소가 없는 경우 예외 발생

nextLine()

  1. nextLine()은 token 단위가 아닌, Enter 단위로 읽는다.

  2. nextLine()은 \n과 공백문자를 포함해서 읽어들인다. 다른 메서드들은 \n 뿐만 아니라 공백문자도 제외해서 읽어들인다.

  3. nextLine()은 \n을 버리고 반환한다. 다른 메서드들은 애초에 안 읽어들였으므로 \n과 공백문자가 제외된 상태로 반환한다.


2. Scanner 클래스 메서드 활용 예시

이 구조는 문자열로 입력을 받아서 숫자로 바꾸는 전형적인 방법이야.

String tmp = scanner.nextLine();
input = Integer.parseInt(tmp); 

바로 input에 숫자를 입력받을 수는 없을까?"

가능해!

입력이 숫자라면 nextInt()를 써서 바로 input에 저장할 수 있어:

int input = scanner.nextInt();

이렇게 하면 중간에 String tmp를 거칠 필요 없이 숫자를 바로 읽어서 input에 넣을 수 있어.

근데 왜 굳이 nextLine() → parseInt() 방식도 쓰는 걸까?

  • nextInt()는 줄바꿈 문자를 안 읽는다.

그래서 nextInt() 다음에 nextLine()을 쓰면 버퍼에 남은 줄바꿈 때문에 이상하게 동작할 수 있어.

int input = scanner.nextInt();
String text = scanner.nextLine(); // 여기가 빈 문자열("")을 받을 수도 있음

이런 문제가 있어서, 처음부터 nextLine()으로 다 받고 숫자로 변환하는 방법이 더 안전할 수 있어, 특히 다양한 입력을 받을 때.


결론

1️⃣ 숫자만 받으면 scanner.nextInt()를 써도 OK.
2️⃣ 줄바꿈 문제나 혼합 입력이 예상되면 nextLine() , parseInt() 조합이 더 안전해.

0개의 댓글