본문 바로가기
Java (국비)/Java 이론

next() 그리고 nextLine() 의 차이

by Hwanii_ 2023. 5. 13.
728x90

Test 문제를 풀면 Scanner 클래스는 계속하여 사용 하게 되는데,

이때, next() 와 nextLine()을 사용하다가 발생하는 문제에 대해 정리를 해보았다.

 

Scanner 클래스의 메서드는 아래와 같다.

next() 

nextLine()

nextByte()

nextShort()

nextInt()

nextLong()

nextDouble()

close()

등..

 이런식으로 이클립스에서 확인해 볼 수 있다.

 

현재 주로 사용하는 메서드는

next()

nextLine()

nextInt()

등인데,

 

nextLine() 을 사용하다가 문제가 자주 발생했다.

 

예를들어 아래와 같이 코드를 짰을 경우에, 

 

사용자로부터 num은 잘 입력받다가

str값을 입력 하기 전에 입력이 종료되어 바로 출력값이 나오는 것을 확인 하게 된다.

 

이클립스에서 구현
?

 

이런 오류가 발생 하는 이유 :

 

nextLine()은 개행문자 \n을 포함하여 입력을 받는다.

 

nextInt()는 입력값 1을 받고, 엔터키를 입력하면

Buffer에 1\n이 올라가고

개행문자를 제외하고 1 만 가져 온다.

 

근데, Buffer에 개행문자 \n이 남아있으므로,

nextLine()은 개행문자를 포함하여 입력을 받기 때문에

\n을 가져오게 된다.

즉, 엔터키를 가져오니 엔터가 쳐져서 str 입력을 못하고 넘어가 버리는 것이다.

 

해결 방법 :

 

1. next() 와 nextLine() 를 같이 쓸 수 있는 상황이면,

nextLine() 이전에 입력 받는 값을 고려하여 next()로 대체 하기.


2. nextLine()을 뒤에 써야한다면 Buffer를 정리하기 위한 nextLine()을 실행해주는 방법이 있다.

 

2번 방법

정상적으로 입력이 되는 모습을 확인.

 

결론 :

next()와 nextLine() 둘다 문자열을 받을 수 있는 메서드 이지만

nextLine()이 개행문자를 포함하여 받아온다는 차이가 있다.


space와 같은 공백문자를 포함하여 입력 값을 받고 싶은 경우

nextLine()을 사용 해야 하기 때문에, 성능상으로는 nextLine()가 우위에 있다고 할 수 있다.

 

추가 :

 

메인함수에서 사용자로부터 입력을 2번 이상 받는 상황일 때

nextInt() 등과 nextLine()을 다 사용 해야 한다면

nextInt() 등을 사용 한 후 바로 버퍼값 제거를 위해 nextLine()을 사용하기. 

반응형

'Java (국비) > Java 이론' 카테고리의 다른 글

상속 2  (0) 2023.05.15
상속  (0) 2023.05.15
Java  (0) 2023.05.11
객체지향언어 (Object Oriented Language) 특징  (2) 2023.05.10
함수 간단 정리  (0) 2023.05.09