IT Study/컴퓨터 기초

[Java] next()와 nextLine() 차이와 사용법

three kim 2023. 3. 24. 10:36
728x90

"next 말고 nextLine만 사용하면 안 돼?"

"안됩니다.."

 

next()와 nextLine()은 Scanner 클래스에서 사용하는 메서드입니다.

이들을 사용하다보면 어떤 상황에서 어떤 메서드를 사용해야할지 많이 고민됩니다.

이번 블로그 글을 정리하며, 이들의 차이를 정확히 확인하겠습니다.

 

next() 메서드

공백문자(띄어쓰기 " ", 탭 "\t", 개행문자 "\n" 등) 이전의 문자열만 입력받아 처리합니다.

 

nextLine() 메서드

개행문자(\n)를 포함한 문자열 1줄을 입력 받아 처리합니다.

 

개념만 읽으면 이해가 잘 되지 않을 수도 있으니, 아래의 예시를 보며 확인해봅시다.

import java.util.Scanner;

public class nextStudy {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("입력 > ");
		String str1 = sc.next();
		System.out.println("str1 -> " + str1);
		String str2 = sc.next(); 
		System.out.println("str2 -> " + str2);
		
		System.out.print("입력 > ");
		String str3 = sc.next();
		System.out.println("str3 -> " + str3);
		String str4 = sc.nextLine();
		System.out.print("str4 -> " + str4);
	}
}
입력 > a a
str1 -> a
str2 -> a
입력 > a a
str3 -> a
str4 ->  a

 

위 코드에는 입력 받을 수 있는 라인이 총 4개입니다.

그러나 실제로 제가 입력한 값은 2번뿐입니다.

 

왜 그런걸까요?

 

1. next()는 공백 전까지의 값만을 가져가며, 문자열 앞 부분의 공백도 무시합니다.

System.out.print("입력 > ");

String str1 = sc.next();		// str1에 'a a'(a공백a엔터) 입력 시
System.out.println("str1 -> " + str1);	// str1은 공백 전의 문자 'a'만 데려갑니다.

String str2 = sc.next();		// 이후 str2는 입력하지 않아도 앞에 남아있던 ' a'(공백a엔터)를 받고
System.out.println("str2 -> " + str2);	// str2는 공백과 엔터를 무시하고 'a'만 데려갑니다.

 

2. nextLine()은 개행문자(엔터)까지 모든 값을 읽어옵니다. 따라서 공백도 문자열의 일부로 생각하여 모두 읽어옵니다.

System.out.print("입력 > ");

String str3 = sc.next();		// str3에 'a a'(a공백a엔터) 입력 시
System.out.println("str3 -> " + str3);	// str3은 공백 전의 문자 'a'만 데려갑니다.

String str4 = sc.next();		// 이후 str4는 입력하지 않아도 앞에 남아있던 ' a'(공백a엔터)를 받고
System.out.println("str4 -> " + str4);	// str4는 공백과 엔터를 모두 포함하여 ' a'(공백a)가 출력됩니다.// 엔터(개행문자) 포함으로 인해 커서는 다음 줄에 놓여있습니다.

 

🔥총 정리

next() 또는 nextInt() 등은 개행문자(공백, 엔터, 탭)을 무시한다.
nextLine()은 개행문자를 모두 읽어오기 때문에, nextLine() 실행 후 어떤 값도 버퍼에 남아있지 않는다.

☝️next() 사용
공백이나 탭이 포함되어있지 않은 숫자 등을 입력받을 때는 next()를 사용하되,
그 뒤에 nextLine()을 한번 더 작성하여 버퍼에 남아있던 엔터를 정리하는 것이 좋다.
(공백이나 탭을 잘못 입력했을 경우 무시하기 때문에 정상 출력 가능)


☝️nextLine() 사용
공백이나 탭이 포함되어있는 문장(문자열) 등을 입력받을 때는 nextLine()를 사용한다.
댓글수0