본문 바로가기
Language/JAVA

[JAVA] 자바_스캐너(Scanner)

by 썸머워즈 2019. 3. 21.
반응형

스캐너(Scanner)

- Scanner 클래스이다. (java.util.Scanner)

- 읽은 바이트를 문자, 정수, 실수, 불리언, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스이다.

- Scanner는 입력되는 키 값을 공백으로 구분되는 토큰 단위로 읽는다.

- 공백 문자 : ' \t ' , ' \f ' , ' \r ' , ' ' , ' \n '
- 개발자가 원하는 타입 값으로 쉽게 읽을 수 있다.
- 프로그램을 실행시키고 콘솔 창에 문자열을 입력하고 'Enter'를 누르면 된다.


* Scanner 클래스 기본 사용법

import java.util.Scanner; //기본적으로 import 문 필요
 
Scanner scan = new Scanner(System.in); // Scanner 객체

- System.in을 사용하여 키보드 입력 값을 읽고 원하는 타입으로 변환하여 리턴한다.

* System.in 이란?
- 키보드와 연결된 자바의 표준 입력 스트림이다.
- 입력되는 키를 바이트로 리턴하는 저수준 스트림이다.
- System.in을 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움이 있다.

 

스캐너(Scanner)의 주요 메서드

메소드  설명 
 String next()   다음 토큰을 문자열로 리턴 
 byte nextByte()  다음 토큰을 byte 타입으로 리턴 
 short nextShort()   다음 토큰을 short 타입으로 리턴 
 int nextInt()   다음 토큰을 int 타입으로 리턴
 long nextLong()   다음 토큰을 long 타입으로 리턴 
 float nextFloat()   다음 토큰을 float 타입으로 리턴 
 double nextDouble()   다음 토큰을 double 타입으로 리턴 
 String nextLine()   ' \n '을 포함하는 한 라인을 읽고 ' \n '을 버린 나머지만 리턴 
 void close()   Scanner의 사용 종료 
 boolean hasNext()   현재 입력된 토큰이 있으면 true, 아니면 새로운 입력이 들어올 때까지 무한정 기다려서, 새로운 입력이 들어오면 그 때 true 리턴. ctrl + z 키가 입력되면 입력 끝이므로 false 리턴 

 

예제 1) 간단한 사용법

import java.util.Scanner;
public class JavaScanner{
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        String name, address;
        int age;
        double weight;
        
        name = scan.next();
        address = scan.next();
        age = scan.nextInt();
        weight = scan.nextDouble();
        
        System.out.println(name + address + age + weight);          
        scan.close();
    }
}

Scanner는 띄어쓰기 기준 즉, 토큰 단위로 하나씩 읽기 때문에 위와 같은 코드에서 사용자가 값을 입력한다면,

"HAN INCHEON 25 70" 이런식으로 띄어쓰기로 구분해서 입력해야 한다.

 

변수 타입에 맞게 가져오기 대문에 타입에 맞춰서 사용해 줘야 한다.

그중 유독 nextLine() 메서드를 사용할 경우에는 주의가 필요하다.

 

예제 2) nextLine() 사용

import java.util.Scanner;
public class JavaScanner{
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        String name;
        int age;
             
        System.out.println("나이를 입력하세요.");
        age = scan.nextInt();
        System.out.println("이름을 입력하세요.");
        name = scan.nextLine();
 
        System.out.printf("나이는 %d입니다.%n",age);
        System.out.printf("이름은 %s입니다.%n",name);
        scan.close();

    }
}

* 실행결과

나이를 입력하세요.
25
이름을 입력하세요.
나이는 25입니다.
이름은 입니다.

nextInt()와 같이 타입을 지정해서 받는 메서드는 'Enter'값을 무시하고 해당 타입만 받아 변환하여 반환하는데,
이때 컴퓨터 내부에서는 'Enter'값이 아직 남아있기 때문에 nextLine()에서 'Enter'값을 받아들이고 그대로 입력되어 종료되는 것이다. (그래서 주의가 필요하다.)

그리고 scan을 굳이 close()로 닫아줄 필요는 없지만 닫아주는 습관을 기르도록 하자.

반응형


댓글

TOP