지금까지 next()와 nextLine()의 차이를 모른 채로 계속 사용하다가
차이점이 궁금해서 찾아보게 되었다.
next(), nextLine()은 Scanner 클래스의 메소드이다.
공통점은 둘 다 문자열로 반환시켜주고 차이점은
nextLine()메소드는 Enter를 치기 전까지 쓴 문자열 모두 반환한다는 것이고
next()메소드는 공백(space) 전까지 입력받은 문자열을 반환한다는 것이다.
입출력시 결과
nextInt(),nextLine()을 썼을 때
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);
}
}
nextInt(),next()를 썼을 때
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만 가져오고 프로그램이 종료되는 것이다.
메소드 참고
'Programming > Java' 카테고리의 다른 글
[Programmers] 크레인 인형뽑기 게임 문제 (0) | 2022.01.20 |
---|---|
프로세스(Process) 메모리 구조 (2) | 2022.01.17 |
[Java] 알고리즘을 위한 자바 IO (0) | 2022.01.16 |
댓글