Java에서 입력받을 때 대표적으로 많이 사용하는 클래스이다.
import java.util.Scanner.*;
Scanner 클래스를 호출하여 사용한다.
Scanner 는 기본 데이터 타입을 입력받을 수 있다.
Scanner sc = new Scanner(System.in);
위의 코드처럼 Scanner 객체를 생성하여 이용한다.
Scanner() 안에 들어가는 System.in
은 사용로부터 입력 받기 위한 입력 스트림이다.
int i = sc.nextInt(); // Integer 타입 입력 및 리턴
long l = sc.nextLong(); // Long 타입 입력 및 리턴
String s = sc.next(); // 공백을 기준으로 한 단어 읽기
String ss = sc.nextLing(); // 개행을 기준으로 한 줄 읽기
해당 코드처럼 사용할 수 있다.
기본 데이터 타입별로 입력받는 메소드가 있다.
강의를 보다가 BufferReader를 처음 접하게 됐다.
간단하게 입력받는 수가 많다면 Scanner 보다 속도가 빠르다고 알려주셨는데, 궁금하여 내용을 더 찾아보게 되었다.
빠른 입출력을 위해서 BufferedReader와 BufferedWriter라는 것이 있다고 한다.
Buffer를 사용하지 않는다면 키보드 입력이 키를 누르는 즉시 바로 프로그램에 전달되고,
반면 Buffer를 사용한다면 키보드 입력이 있을 때마다 한 문자씩 Buffer로 전송되며, Buffer가 가득 차거나 개행 문자가 나타나는 경우 Buffer의 내용을 한 번에 프로그램에 전달한다.
입력이 많다면, 키보드의 입력바다 바로 이동하게 하는 것 보다,
중간에 Buffer를 두어 한 번에 묶어서 보내는 것이 더 효율적이며 빠르다고 할 수 있다.
// 선언
BufferedReader bufferedreader
= new BufferedReader(new InputStreamReader(System.in));
// 입력
String s = bufferedreader.readLine();
int i = Integer.parseInt(s);
입력
의 경우 readLine()
이라는 메소드를 사용한다.
리턴 값이 String
으로 고정되어 있으므로,
다른 타입으로 입력받고 싶다면 형변환이 필요하다.
또한, 예외처리가 반드시 필요하다.
readLine()
마다 try/catch
문으로 감싸주거나,
throw IOException
으로 예외처리를 해주어도 된다.
BufferedReader 로 읽어온 데이터는 개행문자 단위(줄 단위) 로 나뉜다.
만약 공백 단위로 데이터가 필요하다면, 추가 작업이 필요하다.
이 때, StringTokenizer
나 String.split()
함수를 사용할 수 있다.
BufferedReader bufferedreader
= new BufferedReader(new InputStreamReader(System.in));
// StringTokenizer
StringTokenizer stringtokenizer
= new StringTokenizer(bufferedreader.readLine());
int n = Integer.parseInt(stringtokenizer.nextToken());
int m = Integer.paserInt(stinrgtokenizer.nextToken());
// String.split()
String array[] = bufferedreader.readLine().split();
StringTokenizer의 nextToken()
메소드를 사용하면
readLine()
으로 입력받은 값을 공백 단위로 구분해 순서대로 호출할 수 있다.
String.split() 을 사용하면 공백 단위
로 끊어 데이터를 배열에 저장하여 사용할 수 있다.
참고
https://st-lab.tistory.com/92
https://rlakuku-program.tistory.com/33