본문 바로가기

JAVA HTML JAVASCRIPT/소오스

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

728x90
반응형

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을 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움이 있다. 

 

*간단한 예시

String name = scan.next(); // "HAN" 

String city = scan.next(); // "INCHEON" 

int age = scan.nextInt(); // 25 

double weight = scan.nextDouble(); // 65.1 

boolean single = scan.nextBoolean(); // true

 

-스캐너(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();

 

    }

 

}

 

 

HAN INCHEON 25 70

 

이런식으로 한줄로 치게되면 Scanner는 띄어쓰기 기준 즉 토큰단위로 하나씩 읽기때문에

각각의 순서대로 위에서 선언된 변수로 입력된다.

 

변수 타입에 맞게 가져오기때문에 타입에 맞춰서 사용해 주야합니다.

그중에서 유독 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 '값을 받아들이고 그대로 입력되어 종료되는것입니다. 분명 입력할때는 25 하고 엔터를 눌렀을 뿐인데 말이죠 주의해주세요!

 

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

 

출처 : mine-it-record.tistory.com/103

728x90
반응형