Scanner 클래스
📍 Scanner 클래스
– 화면, 파일, 문자열과 같은 입력 소스로부터 문자데이터를 읽어오는데 사용되는 클래스.
– 여러 형태의 생성자를 오버로딩하여 지원하므로 다양한 입력소스로부터 데이터를 읽을 수 있음.
ex ) scanner(String source), scanner(file source) 등
– 정규표현식 (Regular expression)을 이용한 라인단위의 검색을 지원함.
– scanner를 사용하기 위해서는 java.util.Scanner import 필요.
– nextXXX() 메서드를 호출하여 입력 받음.
1 ) nextInt() : int
2 ) nextLine() : String
▸ Scanner 설정 문법
Scanner 변수명 = new Scanner( );
Scanner 변수명 = new Scanner(System.in);
– 입력을 받을 시 System.in 활용.
– 변수명.nextXXX() 메서드를 호출하여 입력 받음.
EX1 ) 기본 형태 사용 |
Scanner scan = new Scanner(System.in);
System.out.println("원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 : ");
String input = "";
input = scan.next();
System.out.println("입력하신 값은 " + input + " 입니다.");
코드 분석
1 | – Scanner 클래스의 인스턴스를 생성하고, 생성자의 파라미터에 입력받을 시 사용하는 System.in을 넣어줌. |
3 | – 현재 값을 입력할 수 있다고 안내하는 문자열을 작성함. |
6 | – scan의 next() 메서드를 호출하여 내가 입력한 결과값을 input에 저장함. |
✓ 실행 결과
원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 :
Q
입력하신 값은 Q 입니다.
EX2 ) do-while문으로 next() 메서드 & nextLine() 메서드 사용 |
1. next() 메서드 호출
do {
System.out.println("원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 : ");
input = scan.next();
System.out.println("입력하신 값은 " + input + " 입니다.");
} while(!input.equals("Q"));
– 'Q'를 입력할 때까지 계속 입력 받는 do-while문 작성.
– 공백을 허용하지 않을 때 사용. 즉, 공백을 받지 않음.
→ 1 1을 넣으면 공백을 구분자 (delimiter)로 생각하여 하나씩 입력받아 input에 대입.
✓ 실행 결과
원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 :
1 1
입력하신 값은 1 입니다.
원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 :
입력하신 값은 1 입니다.
원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 :
2. nextLine() 메서드 호출
do {
System.out.println("원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 : ");
input = scan.nextLine();
System.out.println("입력하신 값은 " + input + " 입니다.");
} while(!input.equals("Q"));
– 공백을 허용하므로 문자열을 입력받을 때 사용함.
– 입력한 값을 라인 단위로 읽음.
→ 1 1을 넣으면 공백이 허용되어 1 1 모두 input에 대입.
✓ 실행 결과
11
입력하신 값은 11 입니다.
원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 :
EX3 ) nextInt() 메서드 사용 |
Scanner scan = new Scanner(System.in);
String input = "";
System.out.println("숫자 (정수)를 입력하세요. : ");
int num = scan.nextInt();
System.out.println(num);
– 정수가 아닌 다른 값을 입력하면 InputMismatchException 예외 발생.
✓ 실행 결과


EX4 ) nextDouble() 메서드 사용 |
Scanner scan = new Scanner(System.in);
String input = "";
System.out.println("숫자 (실수)를 입력하세요. : ");
double dnum = scan.nextDouble();
System.out.println(dnum);
– 실수가 아닌 다른 값을 입력하면 InputMismatchException 예외 발생.
– 정수값을 입력하면 실수로 자동 인식함.
✓ 실행 결과



EX5 ) nextBoolean() 메서드 사용 |
Scanner scan = new Scanner(System.in);
String input = "";
System.out.println("true 또는 False를 입력하세요. : ");
boolean b = scan.nextBoolean();
System.out.println(b);
– 대소문자 구분없이 true 또는 false를 제외한 나머지 값을 입력하면 InputMismatchException 예외 발생.
✓ 실행 결과



EX6 ) InputMismatchException 예외처리 |
Scanner scan = new Scanner(System.in);
String input = "";
System.out.println("true 또는 False를 입력하세요. : ");
try {
boolean b = scan.nextBoolean();
if(b == true) {
System.out.println(b + " 입력.");
}else {
System.out.println(b + " 입력.");
}
}catch(InputMismatchException e){
System.out.println("true 또는 false의 값을 입력해주세요!");
}
코드 분석
7 | – try-catch문을 사용하여 잘못된 값을 입력하였을 때 발생하는 InputMismatchException을 예외처리 해보겠음. |
8 | – nextBoolean() 메서드를 사용하여 나온 결과값을 변수 b에 저장. |
9~13 | – 사용자가 입력한 값(= b)이 ture이면 if문을 실행, 아닐 경우 (= false) else문을 실행하여 사용자가 입력한 값을 각각 출력문을 통해 출력해줌. |
15~17 | – 사용자가 true 또는 false가 아닌 다른 값을 입력했을 때 예외처리를 해 놓았으므로, catch문에서 InputMismatchException 예외처리 하여 에러가 발생하는게 아닌 작성해 놓은 출력문이 출력됨. |
✓ 실행 결과


TEST ) |
Q. Scanner 클래스를 활용하여 사용자의 이름 (inputName)을 입력받고, "inputName"님 환영합니다!" 출력하기.
(이름을 입력하지 않고 엔터키 (null string)를 입력하면 "이름을 입력하세요!" 라고 출력하기.
Scanner scan = new Scanner(System.in);
String inputName;
System.out.println("사용자의 이름을 입력하세요. : ");
inputName = scan.nextLine();
if(!inputName.equals("")) {
System.out.println(inputName + "님 환영합니다!");
}else {
System.out.println("이름을 입력하세요!");
}
– if문의 조건으로 inputName이 비어있지 않다고 작성할 때, NOT연산자와 .equals() 메서드를 사용해야
NULL값 비교 가능.
✓ 실행 결과

