Home » 레퍼런스 » JAVA » java scanner next와 nextline 메서드의 차이점을 알아봅시다.

java scanner next와 nextline 메서드의 차이점을 알아봅시다.

안녕하세요. 이번 시간에는 java scanner next 메서드nextline 메서드의 차이점을 알아보겠습니다.


[그림 1] next 메서드

먼저 next 메서드 입니다. complete token을 찾는다고 되어 있습니다. Scanner의 경우, 입력을 받을 소스만 넘겨주는 경우 delimeter가 white space입니다. 개행, 공백, 탭 문자와 같은 것들입니다. 이들을 포함하지 않는 완전한 토큰을 찾고, 이를 리턴합니다.

[그림 2] nextLine 메서드

nextLine은 현재 line의 남은 부분들을 돌려줍니다. 단, line seperator를 제외합니다. 해당 문자는 소모하긴 하는데, 결과에서 제외합니다. 입력을 보면서, 두 함수가 어떤 차이가 있는지 자세하게 보겠습니다.


먼저 입력으로 쓸 파일은 아래와 같습니다.

[그림 3] 입력으로 쓸 파일

1번째 줄이 4, 2번째 줄이 1입니다.

[그림 4] 예제 1번 프로그램

예제 1번 프로그램은 next() 함수로 입력을 받은 다음에, nextLine() 함수로 입력을 받습니다. 실행 결과가 어떻게 나올까요? 결과 먼저 보겠습니다.

[그림 5] 예제 1번 프로그램의 결과

s1 : 4가 나오고, s2 : 가 나옵니다. s2에 빈 문자열이 들어갔다는 의미입니다. 왜 그런지 도식화한 상황 그림으로 이해해 보겠습니다.

입력 버퍼에는 위와 같이 있습니다. 먼저, next 메서드로 입력을 받았습니다. 이것은 완전한 token을 돌려줍니다. scanner 생성자에 System.in밖에 넘겨주지 않았으므로, whitespace가 포함되지 않은 완전한 토큰인 4를 돌려줍니다.

즉, next 메서드는 4를 소모합니다. \n은 소모하지 않습니다. 이제, nextLine을 불렀습니다.

중요한 것은, 현재 line은 1이므로, 1번째 line의 나머지 부분을 읽게 됩니다. \n이 남아있었기 때문에, nextLine은 \n을 소모하게 됩니다.

입력이 위와 같았다면 어떻게 될까요? next는 완전한 토큰인 4를 만날 때 까지 계속 문자를 소모합니다.

next가 4까지 소모했습니다. 이 시점에서 3번째 line은 남아 있습니다. nextLine()은 현재 line을 모두 읽기 때문에, 3번째 줄의 \n이 nextLine 메서드로 소모되게 됩니다.


이제 아래 프로그램을 보겠습니다.

[그림 6] 예제 2번 프로그램

예제 2번 프로그램은 Scanner의 nextLine 메서드로 먼저 입력을 받은 다음에, next 메서드로 입력을 받습니다. 아까와 같이 1번째 줄에 4, 2번째 줄에 1만 있는 입력을 받아보겠습니다. 어떻게 될까요?

[그림 7] 예제 2번 프로그램의 결과

s1 : 4, s2 : 1이 나옵니다. 왜 이렇게 나왔는지 상황을 도식화 시켜 봅시다.

먼저 nextLine으로 1번째 줄이 소모가 됩니다. 그리고 4가 출력이 됩니다. 개행은 제외되기 때문입니다.

이제 버퍼에는 1만 남았습니다. next 메서드는 1을 소모할 수 있습니다. 따라서, next는 1을 읽게 됩니다. 하나 팁을 드리면, 보통 저는 문자열을 입력 받을 때, nextLine으로 입력받고, parsing을 하는 방식을 많이 사용합니다. 변수가 적기 때문입니다.

Leave a Comment

18 + 15 =