Scanner에서 입력값을 받을 때 next() (nextInt(), nextDouble()) 와 nextLine()이 있는데 이 둘 메소드는 비슷하면서도 차이점이 있다.
next()
- 구분자 : 공백(white space), tab(\t), 개행문자(Enter)(\n)
- 문자열 내에 구분자는 포함되지 않는다.
nextLine()
- 구분자 : 개행문자(Enter)(\n)
- 문자열 내에 개행문자가 포함된다.
개행문자가 포함되는지 않되는지를 잘 구분해야 아래와 같은 오류를 피할 수 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("1. 정수 입력: "); // "10\n" (10 + 엔터키 누름)
int firstInput = sc.nextInt();
System.out.print("2. 문자열 입력: "); // 바로 다음으로 건너뜀
String secondInput = sc.nextLine();
System.out.print("3. 문자열 입력: ");
String thirdInput = sc.next();
}
}
/*
입력값 : 10
안녕하세요.
안녕히 계세요.
*/
/*
출력값 : 1. 정수 입력:
10
2. 문자열 입력:
3. 문자열 입력:
안녕하세요.
두 번째 nextLine()에서 원하는 입력값을 출력 못하는 이유는
첫 번째 입력 받을 때 썼던 메소드 next()가 개행문자(엔터, '\n')를 포함하지 않고 남겨두기 때문이다.
그래서 다음 문자 입력에서는 '\n'만 입력 받고 종료되어 버린다.
이러한 이유때문에 결국에는 입력값 세 줄 중 제대로 출력된 것은 첫 번째 줄과 개행문자, 두번째 줄뿐이다.
728x90
'Java' 카테고리의 다른 글
[Java] ConcurrentHashMap (0) | 2025.06.03 |
---|---|
[Java] split와 정규식 (0) | 2025.05.31 |
[Java] HashMap의 key에 클래스를 사용하면? (0) | 2025.05.26 |
[Java] Optional 클래스 (0) | 2025.05.21 |
[IntelliJ] 단축키 (0) | 2025.05.11 |