자바에서 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()
은 구분자같은건 신경쓰지 않기 때문입니다. 그리고 한 번 읽었으니 추가 입력 기회는 없어집니다. -
댓글 입력