자바를 처음 배울 때는 사용자에게 값을 입력받기 위해 보통 Scanner 클래스를 사용하게 된다. 하지만 알고리즘 풀이를 시작하면 Scanner로 입력받아 시간초과가 발생하는 경험을 하게 된다. 그 후 BufferedReader를 접하면서 사용하게 된다.
둘 다 사용자에게 값을 입력받을 수 있는 기능을 제공한다. 두 클래스는 무엇인지 그리고 어떤 차이점이 있는 지 정리해보고자 한다.
import java.util.Scanner;
Scanner scanner = new Scanner(System.in); // 키보드 입력을 읽을 Scanner 객체 생성
System.out.print("정수를 입력하세요: ");
int number = scanner.nextInt(); // 정수 입력받기
System.out.println("입력받은 정수: " + number);
Scanner scanner = new Scanner(System.in);
System.out.print("문자열을 입력하세요: ");
String inputString = scanner.nextLine(); // 문자열 입력받기 (공백 포함)
System.out.println("입력받은 문자열: " + inputString);
입력받을 때는 System.in을 통해 Scanner 객체를 생성한다.
System.in
사용자로부터 입력을 받기 위한 입력 스트림. Scanner 클래스 외 다른 입력 클래스도 System.in을 통해 사용사 입력을 받아야한다.
Scanner 클래스의 useDelimiter() 메소드를 사용하여, 입력 소스에서 토큰을 구분할 문자열을 지정할 수 있다. 기본적으로는 공백이나 개행 문자로 토큰을 구분하는데, 이를 원하는 구분자로 변경할 수 있다.
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter(","); // 쉼표를 구분자로 사용
System.out.print("쉼표로 구분된 여러 값을 입력하세요: ");
while (scanner.hasNext()) {
String value = scanner.next();
System.out.println("입력받은 값: " + value);
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // 키보드 입력을 읽을 BufferedReader 객체 생성
System.out.print("문자열을 입력하세요: ");
try {
String inputString = reader.readLine(); // 문자열 입력받기
System.out.println("입력받은 문자열: " + inputString);
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("여러 줄의 텍스트를 입력하세요 (종료하려면 'exit' 입력): ");
String line;
while (!(line = reader.readLine()).equals("exit")) {
System.out.println("입력받은 줄: " + line);
}
} catch (IOException e) {
e.printStackTrace();
}