지금까지 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만 가져오고 프로그램이 종료되는 것이다.