Java Scanner 완전 정복: 종합 가이드와 실전 예제
Java Scanner 마스터하기
명확한 실전 예제를 바탕으로 Java의 Scanner 클래스를 사용하여 다양한 소스에서 텍스트, 숫자, 복합 타입을 읽는 방법을 알아봅니다.
java.util의 Scanner 클래스는 스트림, 파일, 문자열, 콘솔에서 입력을 캡처할 수 있게 합니다. 아래에서 핵심 사용 패턴을 살펴봅니다.
예제 1: 전체 텍스트 줄 읽기
import java.util.Scanner;
class Main {
public static void main(String[] args) {
// 표준 입력에서 읽는 Scanner 생성
Scanner input = new Scanner(System.in);
System.out.print("Enter your name: ");
// 공백 포함 전체 줄 읽기
String name = input.nextLine();
System.out.println("My name is " + name);
input.close();
}
}
실행 결과
Enter your name: Kelvin
My name is Kelvin
Scanner input = new Scanner(System.in); 줄에 주목하세요. 키보드 입력을 듣는 Scanner를 구성합니다.
nextLine() 메서드는 줄바꿈까지 전체 줄을 소비합니다.
Scanner 클래스 임포트하기
Scanner를 사용하기 전에 임포트하세요:
import java.util.Scanner;
패키지 임포트에 대한 더 자세한 내용은 Java 패키지를 참조하세요.
Scanner 객체 생성하기
입력 소스에 따라 다음과 같이 Scanner를 인스턴스화합니다:
// 입력 스트림에서 (예: System.in)
Scanner sc1 = new Scanner(InputStream input);
// 파일에서
Scanner sc2 = new Scanner(File file);
// 문자열에서
Scanner sc3 = new Scanner(String str);
입력을 위한 핵심 Scanner 메서드
Scanner 클래스는 다양한 데이터 타입을 읽기 위한 다양한 메서드를 제공합니다. 아래는 빠른 참조표입니다:
| 메서드 | 설명 |
nextInt() | int 읽기 |
nextFloat() | float 읽기 |
nextBoolean() | boolean 읽기 |
nextLine() | 전체 텍스트 줄 읽기 |
next() | 단일 단어 읽기(공백까지) |
nextByte() | byte 읽기 |
nextDouble() | double 읽기 |
nextShort() | short 읽기 |
nextLong() | long 읽기 |
예제 2: nextInt() 사용
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter an integer: ");
int data1 = input.nextInt();
System.out.println("Using nextInt(): " + data1);
input.close();
}
}
실행 결과
Enter an integer: 22
Using nextInt(): 22
예제 3: nextDouble() 사용
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter Double value: ");
double value = input.nextDouble();
System.out.println("Using nextDouble(): " + value);
input.close();
}
}
실행 결과
Enter Double value: 33.33
Using nextDouble(): 33.33
예제 4: next() 사용
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter your name: ");
String value = input.next();
System.out.println("Using next(): " + value);
input.close();
}
}
실행 결과
Enter your name: Jonny Walker
Using next(): Jonny
next()는 첫 공백에서 멈추므로 이름만 캡처됩니다.
예제 5: nextLine() 사용
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter your name: ");
String value = input.nextLine();
System.out.println("Using nextLine(): " + value);
input.close();
}
}
실행 결과
Enter your name: Jonny Walker
Using nextLine(): Jonny Walker
next()와 달리 nextLine()은 개행 문자까지 공백을 포함하여 전체 줄을 캡처합니다.
추천 읽기: Java Scanner nextLine() 건너뛰기 문제
BigInteger와 BigDecimal과의 Scanner
고정밀 숫자를 위해 Scanner는 다음을 지원합니다:
- nextBigInteger() -
BigInteger 읽기
- nextBigDecimal() -
BigDecimal 읽기
예제: BigInteger와 BigDecimal 읽기
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a big integer: ");
BigInteger value1 = input.nextBigInteger();
System.out.println("Using nextBigInteger(): " + value1);
System.out.print("Enter a big decimal: ");
BigDecimal value2 = input.nextBigDecimal();
System.out.println("Using nextBigDecimal(): " + value2);
input.close();
}
}
실행 결과
Enter a big integer: 987654321
Using nextBigInteger(): 987654321
Enter a big decimal: 9.55555
Using nextBigDecimal(): 9.55555
Scanner 내부 작동 원리
Scanner는 전체 줄을 읽은 다음 기본적으로 공백을 사용하여 토큰으로 분할합니다. 각 토큰은 적절한 메서드로 조회할 수 있습니다. 예를 들어 입력 He is 22가 주어지면 토큰은 He, is, 22입니다.
팁: 토큰은 스페이스, 탭, 개행으로 구분되며 사용자 정의 구분자로 변경할 수 있습니다.