자바에서 nextInt nextLine next의 차이

조회수 2501회

import java.util.Scanner;

public class Demo11720_2 {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt(); //
        String numA=in.next(); 


        System.out.println(n);
        System.out.println(numA);

    }

}
public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    int n=in.nextInt(); 
    String numA=in.nextLine(); 

    System.out.println(n);
    System.out.println(numA);

}

}

nextInt가 개행문자를 제거 하지 않기 때문에 2번째의 nextLine예제 에서 1(엔터)12345를 입력하더라도 엔터가 nextLine의 입력으로 들어간다고 알고 있습니다. 그런데 왜 첫번째의 next예제에서는 1(엔터)12345를 입력하게될 때 그대로 1 12345가 출력되는 건가요?

next는 엔터에 대한 입력을 받지 않는건가요?

시간내 답변 해주셔서 미리 감사드립니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 정확한 답변은 아니고 추론입니다.

    Scanner.next() 혹은 파생형 메서드 Scanner.nextInt() 등은 토큰(=어절) 단위로 입력을 읽습니다. 그래서 토큰을 구분하는 구분자인 공백, 줄바꿈은 읽지 않습니다.

    반면 Scanner.nextLine()은 줄 단위로 읽습니다. 그러면 개행문자까지 같이 읽는다는 말이겠죠.

    이쯤되면 정황상 다음처럼 추정할 수 있습니다.

    next() - next()

    첫 번째 next()에서 1(엔터)를 입력하면 next()는 1까지만 읽습니다. 엔터는 어딘가(버퍼라던가)에 남아있는걸로 보입니다. 두 번째 next()에서는 엔터를 구분자로 보고 무시하니 다음 입력이 있을때까지 대기합니다.

    next() - nextLine()

    next()에서 1(엔터)를 입력하면 위와 마찬가지로 next()는 1까지만 읽습니다. 이 때도 엔터는 어딘가에 남아있겠죠. 이 어딘가에 있는 엔터는 nextLine()에서 읽힙니다. 왜냐면 nextLine()은 구분자같은건 신경쓰지 않기 때문입니다. 그리고 한 번 읽었으니 추가 입력 기회는 없어집니다.

  • 답변 감사드립니다~ :)

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)