JAVA next(), nextLine()의 차이

Meenzino·2021년 12월 3일
1

Java

목록 보기
1/2
post-thumbnail
post-custom-banner

지금까지 next()nextLine()의 차이를 모른 채로 계속 사용하다가
차이점이 궁금해서 찾아보게 되었다.

next(), nextLine()은 Scanner 클래스의 메소드이다.
공통점은 둘 다 문자열로 반환시켜주고 차이점은
nextLine()메소드는 Enter를 치기 전까지 쓴 문자열 모두 반환한다는 것이고
next()메소드는 공백(space) 전까지 입력받은 문자열을 반환한다는 것이다.

입출력시 결과

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int number;
        String string;
        System.out.print("숫자 입력 : ");
        number = scanner.nextInt();

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

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

package indiangame;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int number;
        String string;
        System.out.print("숫자 입력 : ");
        number = scanner.nextInt();

        System.out.print("문자열 입력 : ");
        string = scanner.next();
        scanner.close();

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

nextInt와 nextLine()을 사용했을때의 결과창을 보면 nextInt()만 입력을 받고 nextLine은 입력받지 못한 채 출력이 된 것을 확인 할 수 있다.

그 이유가 무엇일까?

next()는 개행문자(Enter)를 무시하고 입력을 받고 nextLine은 한줄 단위로 입력을 받기 때문에 개행문자(Enter)도 포함한다.
좀 더 직관적으로 설명하자면 위 처럼 1234를 입력하고 Enter를 쳤다면 버퍼에 1234\n이 존재한다. 이 때 nextInt()가 버퍼의 내용을 가져올 때 분리자를 제외하고 가져오기 때문에 1234만 가져오게 된다. 그러면 버퍼에 \n이 남아있게 되는데 nextLine()은 공백과 개행문자(Enter)인 분리자를 포함시키기 때문에 \n만 가져오고 프로그램이 종료되는 것이다.

메소드 참고

post-custom-banner

0개의 댓글