Java Category/Java

[Java] next()와 nextLine()의 차이

ReBugs 2023. 8. 22.
import java.util.Scanner;
public class Main {
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
        int number;
        String string;
        System.out.print("숫자 입력 : ");
        number = sc.nextInt();

        System.out.println("문자열 입력 : ");
        string = sc.nextLine();

        System.out.println("숫자 입력 결과 : " + number);
        System.out.println("문자열 입력 결과 : " + string);
	}
}
/*
숫자 입력 : 6546201
문자열 입력 : 
숫자 입력 결과 : 6546201
문자열 입력 결과 : 
*/

의도대로라면 숫자와 문자를 모두 입력을 받아야 하지만, 숫자만 입력받고 프로그램이 종료되었다.

 

이유는 next()는 개행문자(\n)을 무시하고 입력을 받고, 반대로 nextLine()은 개행문자를 포함해서 입력을 받기 때문이다.

따라서 입력 버퍼에는 6546201\n이 들어오게 되고 next()는 개행문자를 무시하기 때문에 6546201만 가져오게 되고, 따라서 버퍼에는 \n만 남게된다.

 

결과적으로 버퍼에 남은 \n을 nextLine()이 가져오게되고 프로그램이 종료된 것이다.

 

next()
버퍼에 입력된 문자나 문자열에서 공백과 개행문자 전까지를 가져온다.
nextLine()
개행문자를 만날 때까지의 문자열 전체를 입력받는다.
버퍼에 입력된 문자열(공백포함)을 개행문자까지 다 가져온다.

 

따라서 이러한 문제를 해결하기 위해서는 버퍼에 잔류하는 내용물을 비워줄 필요가 있다.

즉, 버퍼를 비워줘야 한다.

next()와 nextLine() 사이에 매개 문자열이 없는 nextLine()을 두면 버퍼를 비울 수 있다.

 

import java.util.Scanner;
public class Main {
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
        int number;
        String string;
        System.out.print("숫자 입력 : ");
        number = sc.nextInt();
        
        sc.nextLine();
        
        System.out.println("문자열 입력 : ");
        string = sc.nextLine();

        System.out.println("숫자 입력 결과 : " + number);
        System.out.println("문자열 입력 결과 : " + string);
	}
}
/*
숫자 입력 : 1234
문자열 입력 : 
asd asdasd
숫자 입력 결과 : 1234
문자열 입력 결과 : asd asdasd
*/

 

댓글