Scanner 클래스란?
Scanner란 사용자로 부터 입력을 받을 수 있도록 도와주는 것으로,
간단한 예시를 보자면, 사용자가 게임에 로그인하기 위해, 아이디와 비밀번호를 입력하는 것과 같습니다.
Scanner는 다음과 같은 특징을 가집니다.
- 기본적인 데이터 타입을 모두 입력받을 수 있다.
- 토큰을 기준으로 데이터를 입력받는다. (*토큰 : 공백 문자(Spacebar), 탭(Tab), 개행(Enter) 등으로 구분되는 요소*)
- nextLine()은 띄어쓰기를 포함해 읽고, 나머지 메서드들은 띄어쓰기, 공백문자를 제외하고 읽는다.
Scanner 클래스 사용
import java.util.Scanner;
Scanner input = new Scanner(System.in);
- System.in 이란?
사용자로부터 입력을 받기 위한 입력 스트림으로,
Scanner 뿐만 아니라 다른 입력 방식들도 사용자로부터 입력을 받기 위해서는 System.in이 사용됩니다.
Scanner 메서드
메서드 | 반환타입 | 설 명 |
next() | String | 다음 토큰을 String 타입으로 반환 ( 띄어쓰기 뒷 부분은 읽지 않는다.) |
nextLine() | String | 한 줄("\n (Enter)"를 치기 전까지)을 읽고, "\n (Enter)"값이 제외된 부분만을 출력한다. (Ex: "My name is H"를 입력하고 엔터를 누르면 엔터를 누르기전까지인 "My name is H"가 출력") |
nextByte() | Byte | 다음 토큰을 byte타입으로 반환 |
nextShort() | Short | 다음 토큰을 short 타입으로 반환 |
nextInt() | Int | 다음 토큰을 int 타입으로 반환 |
nextLong() | Long | 다음 토큰을 long 타입으로 반환 |
nextFloat() | Float | 다음 토큰을 float 타입으로 반환 |
nextDouble() | Double | 다음 토큰을 double 타입으로 반환 |
close() | void | Scanner의 사용 종료 |
hasNext() | Boolean | 현재 입력된 토큰이 있으면 true, 아니면 새로운 입력이 들어올 때까지 무한정 기다려서, 새로운 입력이 들어오면 그 때 true 반환. ctrl + z 키가 입력되면 입력 끝이므로 false 반환 |
hasNextLine() | Boolean | 다음에 읽을 값(Line 줄)이 있는지 확인. |
Scanner 예제
nextLine()과 나머지 메서드들의 차이
아래 예시 코드들을 보면 nextInt()는 123 34를 입력했지만, 입력값을 읽을 때 공백(Space)를 제외해서 읽어 123만을 출력합니다.
반면 nextLine()은 공백(Space)을 포함한 한 줄을 읽기 때문에 Hello Hi가 그대로 출력됩니다.
nextInt() 예시
import java.util.Scanner;
class ScannerEx1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("숫자를 입력하세요 : ");
int num = input.nextInt();
System.out.println(num);
}
}
nextLine() 예시
import java.util.Scanner;
class ScannerEx1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print(">> ");
String str = input.nextLine();
System.out.println(str);
}
}
두 메서드를 같이 사용하여 비교
nextInt() 메서드는 공백을 제외해서 읽으므로 "3"만을 읽고 끝이나기 때문에 nextLine() " Hi"는 str에 저장됩니다.
import java.util.Scanner;
class ScannerEx1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("다음과 같은 형식으로 입력해주세요. (3 Hello)");
int num = input.nextInt();
String str = input.nextLine();
System.out.println("num : " + num);
System.out.println("str : " + str);
input.close();
}
}
nextLine()을 이용하여 타입이 다른 값을 따로 입력 받기
nextLine()메서드를 중간에 추가하여 nextInt()값을 입력 받은 뒤 "\n (Enter)"값을 버리고 nextLine()값을 입력받습니다.
import java.util.Scanner;
class ScannerEx1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("숫자를 입력해주세요.");
int num = input.nextInt();
input.nextLine();
System.out.println("\n문자열을 입력해주세요.");
String str = input.nextLine();
System.out.println("num : " + num);
System.out.println("str : " + str);
input.close();
}
}
hasNext()의 활용
hasNext()는 현재 입력된 토큰이 있으면 true, 아니면 새로운 입력이 들어올 때까지 무한정 기다려서, 새로운 입력이 들어오면 그 때 true 반환합니다.
hasNext()는 입력받은 값이 문자열일 때까지 true를 반환하고,
hasNext뒤에 Int, Byte 같은 타입을 붙여 해당 타입이 들어올 때까지 Scanner를 실행하도록 할 수 있습니다.
만약 hasNextInt로 정수의 입력이 들어 올 때까지 Scanner를 실행한다면 다음과 같이 코드를 짤 수 있습니다.
아래 코드를 보면 정수가 아닌 타입이 들어왔을 경우 hasNextInt()는 false를 종료하고 반복문을 종료합니다.
import java.util.Scanner;
class ScannerEx1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
do {
System.out.println("a값을 입력해주세요.");
int a = input.nextInt();
System.out.println("b값을 입력해주세요.");
int b = input.nextInt();
System.out.println("두 값의 합: " + (a + b));
} while (input.hasNextInt());
}
}
'◼ JAVA' 카테고리의 다른 글
JSP(JavaServer Pages)와 Servlet(서블릿)이란? (0) | 2023.03.08 |
---|---|
[Java/자바] java.time 패키지 (날짜와 시간 다루기) (0) | 2023.01.17 |
[Java/자바] SimpleDateFormat 클래스 (날짜 데이터 출력) (0) | 2023.01.05 |
[Java/자바] 날짜와 시간 (Date, calendar) (0) | 2022.12.26 |
[Java/자바] Join과 Split을 이용한 문자열 제어 (5) | 2022.12.12 |