Scanner 클래스는 자바에서 입력을 읽어오는 데 사용되는 표준 도구입니다.
위치: java.util 패키지에 포함
기능:
기본 역할:
Scanner를 사용하기 위해서는 다음 단계를 따라야 합니다:
Scanner 클래스는 기본적으로 제공되지만, java.util 패키지에 속해 있으므로 명시적으로 import 해야 합니다.
import java.util.Scanner;
Scanner 객체는 입력 소스를 생성자에 전달하여 초기화합니다. 대표적인 생성자 사용법은 다음과 같습니다:
키보드 입력: new Scanner(System.in)
파일 입력: new Scanner(new File("파일경로"))
문자열 입력: new Scanner("입력 문자열")
Scanner는 다양한 데이터 타입에 맞는 메서드를 제공합니다.
정수 입력: nextInt() 정수 단위로 값를 입력받는다.
실수 입력: nextDouble() 실수 단위로 값을 입력받는다.
문자열 입력: nextLine() 줄 단위로 문자열을 입력받는다.
추가 정보: hasNextInt() 는 입력 스트림에서 다음 토큰이 정수로 변환 가능한지를 확인하는 메서드입니다. true 또는 false를 반환합니다 hasNextDouble() 와 hasNextLine() 이와 동일
- true: 다음 토큰이 정수로 변환 가능.
- false: 다음 토큰이 정수가 아니거나 입력 스트림이 비어 있음.
키보드에서 데이터를 읽어오는 기본적인 예제입니다:
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
// 1. Scanner 객체 생성 (키보드 입력)
Scanner scanner = new Scanner(System.in);
// 2. 사용자로부터 입력받기
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine(); // 문자열 입력
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt(); // 정수 입력
// 3. 결과 출력
System.out.println("안녕하세요, " + name + "님! 당신의 나이는 " + age + "살입니다.");
// 4. Scanner 객체 닫기
scanner.close();
}
}
Scanner는 다양한 데이터 타입을 처리할 수 있습니다. 아래 예제는 각 타입의 입력을 받는 방법을 보여줍니다:
import java.util.Scanner;
public class DataTypeExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("정수를 입력하세요: ");
int integerValue = scanner.nextInt();
System.out.print("실수를 입력하세요: ");
double doubleValue = scanner.nextDouble();
System.out.print("문자열을 입력하세요: ");
scanner.nextLine(); // 남아있는 줄바꿈 처리
String stringValue = scanner.nextLine();
System.out.println("입력된 정수: " + integerValue);
System.out.println("입력된 실수: " + doubleValue);
System.out.println("입력된 문자열: " + stringValue);
scanner.close();
}
}
Scanner는 기본적으로 공백(스페이스, 탭, 줄바꿈)을 데이터 구분자로 사용합니다. 그러나 사용자가 원하는 구분자를 지정할 수도 있습니다.
Scanner scanner = new Scanner("Hello World Java");
while (scanner.hasNext()) {
System.out.println(scanner.next()); // 공백 기준으로 단어 출력
}
scanner.close();
Hello
World
Java
Scanner scanner = new Scanner("Apple,Banana,Cherry");
scanner.useDelimiter(","); // 콤마를 구분자로 설정
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
Apple
Banana
Cherry
Scanner 사용 시, 입력값이 예상한 데이터 타입과 맞지 않으면 예외가 발생할 수 있습니다. 이를 방지하기 위해 예외 처리를 추가하는 것이 중요합니다.
예외 처리 예제:
import java.util.Scanner;
public class ExceptionHandlingExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("정수를 입력하세요: ");
int number = scanner.nextInt();
System.out.println("입력된 정수: " + number);
} catch (Exception e) {
System.out.println("유효하지 않은 입력입니다. 정수를 입력해주세요.");
} finally {
scanner.close(); // 항상 Scanner 닫기
}
}
}
장점:
주의점:
해결법: scanner.nextLine() 을 추가하여 버퍼를 비우기.
scanner.nextLine(); // 줄바꿈 처리
// 객체 닫기 필수:
// Scanner를 닫지 않으면 자원을 낭비하게 됩니다. 항상 scanner.close() 호출.
파일 입력:
Scanner fileScanner = new Scanner(new File("data.txt"));
while (fileScanner.hasNextLine()) {
System.out.println(fileScanner.nextLine());
}
fileScanner.close();
문자열 파싱:
Scanner stringScanner = new Scanner("100 200 300");
int sum = 0;
while (stringScanner.hasNextInt()) {
sum += stringScanner.nextInt();
}
System.out.println("합계: " + sum);
stringScanner.close();