[Java] Scanner 클래스
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/