언어(Language)/Java

[Java] Scanner 클래스

송기동 2025. 4. 24. 16:52
728x90

Scanner 클래스

- java.util 패키지에 포함되어 있다. (기본 패키지 외의 패키지라 사용할 때 import를 해줘야함)

- 주로 표준 입력(키보드) 으로부터 데이터를 입력 받을 때 사용

- Scanner는 사용자의 입력을 공백(스페이스, 탭), 줄바꿈 등을 기준으로 토큰(단어) 으로 잘라서 읽음

- 문자열을 공백이나 개행 문자 등을 기준으로 나눠서 다양한 타입(int, double, String 등)으로 변환해주는 기능

 

# 사용 예시

import java.util.Scanner; // Scanner 클래스 임포트

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // Scanner 객체 생성

        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine(); // 문자열 입력 받기

        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt(); // 정수 입력 받기

        System.out.println("안녕하세요, " + name + "님! 나이는 " + age + "살이시군요.");
        
        sc.close(); // 자원 해제 (권장)
    }
}

Scanner 클래스의 주요 메소드

📌 String next( )

- 공백 또는 줄바꿈 전까지 한 단어만 읽음

- 문자열을 입력해도 첫 번째 단어만 가져옴

Scanner sc = new Scanner(System.in);
String word = sc.next();
System.out.println("입력한 단어: " + word);

/*
입력 : hello world
출력 : 입력한 단어: hello
-> next() 는 hello 까지만 읽고, world는 입력 버퍼에 남아있다.
*/

 

📌 String nextLine( )

- 줄 끝까지 전체 문자열을 한 줄로 읽음

- 공백 포함한 문자열을 원할 때 사용

Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
System.out.println("입력한 문장: " + line);

/*
입력 : hello world
출력 : 입력한 문장: hello world
-> nextLine()은 공백도 포함해서 줄 전체를 읽는다.
*/

 

📌 int nextInt( ), double nextDouble( )

- 각각 정수와 실수를 입력할 때 사용

- 숫자 이외를 입력하면 예외(Exception) 발생

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt();
        System.out.println("당신의 나이는 " + age + "살입니다.");

        sc.close();
    }
}

/*
입력 : 25
출력 : 당신의 나이는 25살입니다.
-> nextInt()는 정수를 입력받는다. 숫자 외의 입력은 예외 발생!
*/
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("실수를 입력하세요: ");
        double pi = sc.nextDouble();
        System.out.println("입력한 값: " + pi);

        sc.close();
    }
}

/*
입력 : 3.14
출력 : 입력한 값: 3.14
-> nextDouble()은 실수를 입력받는다. 정수도 가능하지만, 문자는 예외 발생!
*/

 

📌 boolean nextBoolean( )

- true 또는 false 값을 입력받음

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("계속하시겠습니까? (true/false): ");
        boolean answer = sc.nextBoolean();
        System.out.println("입력한 값: " + answer);

        sc.close();
    }
}

/*
입력 : true
출력 : 입력한 값: true

입력 : false
출력 : 입력한 값: false

-> 반드시 true 또는 false (소문자!) 중 하나를 입력해야 한다. 대문자 TRUE는 예외 발생!
*/

 

📌 boolean hasNext( )

- 토근(단어)단위로 입력을 받을 때 사용 즉, 입력값이 여러 개 띄어쓰기로 구분된 항목일 때 유용

- 남은 단어가 하나라도 있다면 true를 반환

// 단어를 하나씩 입력받아 출력
while (sc.hasNext()) {
    String word = sc.next();
    System.out.println("단어: " + word);
}

/*
입력 : apple banana orange
출력 : 
단어: apple
단어: banana
단어: orange
-> hasNext()는 다음 "단어"가 남아있는가? 를 검사합니다.
*/

 

📌 boolean hasNextLine( )

- 줄 단위로 입력을 받을 때 사용합니다. 즉, 사용자가 한 줄 전체를 입력하는 경우에 유용

 

- 다음에 읽을 수 있는 한 줄(line)이 있는지 확인

- 보통 파일이나 문자열 스트림을 읽을 때 자주 사용

- nextLine() 전에 쓰면 안전하게 줄 단위로 처리 가능

// 줄 전체를 입력받아 출력
while (sc.hasNextLine()) {
    String line = sc.nextLine();
    System.out.println("줄: " + line);
}

/*
입력 : 
오늘은 날씨가 좋다
나는 자바를 공부 중이다

출력: 
줄: 오늘은 날씨가 좋다
줄: 나는 자바를 공부 중이다

-> hasNextLine()은 다음에 읽을 "줄"이 있는가? 를 검사
*/

 

 

📌 boolean hasNextInt( ), hasNextDouble( )

- 각각 다음 입력값이 정수인지 실수인지 검사하는 용도

- true이면 nextInt( ), nextDouble( ) 로 안전하게 읽을 수 있음

Scanner sc = new Scanner(System.in);

System.out.print("정수를 입력하세요: ");
if (sc.hasNextInt()) {
    int num = sc.nextInt();
    System.out.println("입력한 정수: " + num);
} else {
    System.out.println("정수가 아닙니다!");
}

sc.close();

/*
입력 :
123     → 출력: 입력한 정수: 123  
hello   → 출력: 정수가 아닙니다!
*/
Scanner sc = new Scanner(System.in);

System.out.print("실수를 입력하세요: ");
if (sc.hasNextDouble()) {
    double num = sc.nextDouble();
    System.out.println("입력한 실수: " + num);
} else {
    System.out.println("실수가 아닙니다!");
}

sc.close();

/*
입력: 
3.14     → 출력: 입력한 실수: 3.14  
apple    → 출력: 실수가 아닙니다!
*/

 

더 자세한 내용은

http://docs.oracle.com/javase/8/docs/api/

 

728x90