ABOUT ME

작은 디테일에 집착하는 개발자

Today
-
Yesterday
-
Total
-
  • [Java] next()와 nextLine() 차이와 사용법
    IT Study/컴퓨터 기초 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()를 사용한다.
Designed by Tistory.