Scanner 클래스의 next(), nextInt(), nextLine() 메서드는 각각 다른 방식으로 입력을 처리합니다.
1. next() 메서드는 다음 입력에서 토큰(공백으로 구분된 단어)을 읽어옵니다.
- 입력에서 첫 번째 공백 전까지의 문자열을 읽습니다.
- 공백이 있는 경우, 공백 이후의 문자열은 다음 호출 시 읽히게 됩니다.
Scanner scanner = new Scanner(System.in);
String word = scanner.next(); // "Hello World" 입력 시 "Hello"를 반환
2. nextInt() 메서드는 다음 입력에서 정수를 읽어옵니다.
- 공백 또는 줄 바꿈으로 구분된 정수 값을 읽습니다.
- 정수가 아닌 값을 입력할 경우 InputMismatchException이 발생합니다(입력 검증 포함).
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt(); // "42" 입력 시 42를 반환, "4 2" 입력 시 4를 반환
3. nextLine() 메서드는 전체 한 줄을 읽습니다.
- 줄 바꿈 문자(Enter)를 기준으로 사용자가 입력한 한 줄 전체를 문자열로 반환합니다.
- 입력 시 줄 바꿈 문자를 포함하지 않고, 라인의 끝에서 자동으로 줄 바꿈을 처리합니다.
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine(); // "Hello World" 입력 시 "Hello World"를 반환
주의사항 !!
next() 또는 nextInt() 호출 후 nextLine()을 호출할 경우, 이전 호출에서 남은 줄 바꿈 문자를 처리하게 되므로 주의가 필요합니다.
next() 또는 nextInt() 호출 후 입력값을 받으면 줄 바꿈 문자가 남게 됩니다. 이후 nextLine()을 호출하면, 줄 바꿈 문자를 읽어서 빈 문자열("")을 반환합니다. 즉, 사용자가 입력한 줄이 없다고 간주되는 것입니다.
System.out.print("정수 입력: ");
int number = scanner.nextInt(); // "42" 입력
System.out.println("입력한 정수: " + number);
System.out.print("한 줄 입력: ");
String line = scanner.nextLine(); // 여전히 줄 바꿈 문자를 읽어 빈 문자열을 반환
System.out.println("입력한 줄: " + line); // 결과는 빈 문자열
이를 해결하기 위해
System.out.print("정수 입력: ");
int number = scanner.nextInt(); // "42" 입력
System.out.println("입력한 정수: " + number);
scanner.nextLine(); // 줄 바꿈 문자를 읽어 빈 문자열을 반환
System.out.print("한 줄 입력: ");
String line = scanner.nextLine(); // 위에서 빈 문자열을 반환했기 때문에, 문자열 입력값을 받게 됨.
System.out.println("입력한 줄: " + line); // 결과는 입력 받은 문자열
이때 4번 줄을 지우고, 2번 줄을 `int number = scanner.nextInt();scanner.nextLine(); ` 로 적어도 됩니다.
'Java > Java 문법' 카테고리의 다른 글
parse 와 강제 형변환 (0) | 2024.09.23 |
---|---|
if를 나열하는 것과 if - else if 의 차이 (0) | 2024.09.23 |
for문을 통해 Map을 순회하기 (0) | 2024.09.19 |
Set (0) | 2024.09.16 |
Java에서 난수 만들기 (0) | 2024.09.13 |