JAVA

Scanner 클래스

태로미 2023. 4. 14. 00:34

 

 

 

 

 

 

 

 

 

 

📍   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에 대입.

   실행 결과

더보기
원하는 값을 입력하세요. 프로그램을 종료하려면 Q를 입력하세요 : 
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 예외 발생.
–   정수값을 입력하면 실수로 자동 인식함.

   실행 결과

더보기
실수 입력했을 때.
실수가 아닌 다른 값을 입력했을 때 예외 발생.
정수 10을 입력했으나 자동으로 10.0 실수로 변환됨.

 

 

 

 

 

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 예외 발생.

   실행 결과

더보기
대소문자 구분 안함.
true 또는 false가 아닌 다른 값을 입력하니 예외 발생.

 

 

 

 

 

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 예외처리 하여 에러가 발생하는게 아닌 작성해 놓은 출력문이 출력됨.

   실행 결과

더보기
try문의 else문이 실행되어 해당 출력문이 출력됨.
예외처리하여 작성해놓은 출력문이 출력됨.

 

 

 

 

 

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값 비교 가능.

   실행 결과

더보기
이름을 입력했을 때.
이름을 입력하지 않았을 때,  NULL일 때.