TIL - BufferedReader / StringTokenizer

su·2023년 12월 11일
0

TIL

목록 보기
79/93
post-thumbnail

Scanner

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();  // 개행을 기준으로 한 줄 읽기

해당 코드처럼 사용할 수 있다.
기본 데이터 타입별로 입력받는 메소드가 있다.

BufferedReader

강의를 보다가 BufferReader를 처음 접하게 됐다.
간단하게 입력받는 수가 많다면 Scanner 보다 속도가 빠르다고 알려주셨는데, 궁금하여 내용을 더 찾아보게 되었다.

빠른 입출력을 위해서 BufferedReader와 BufferedWriter라는 것이 있다고 한다.
Buffer를 사용하지 않는다면 키보드 입력이 키를 누르는 즉시 바로 프로그램에 전달되고,
반면 Buffer를 사용한다면 키보드 입력이 있을 때마다 한 문자씩 Buffer로 전송되며, Buffer가 가득 차거나 개행 문자가 나타나는 경우 Buffer의 내용을 한 번에 프로그램에 전달한다.

입력이 많다면, 키보드의 입력바다 바로 이동하게 하는 것 보다,
중간에 Buffer를 두어 한 번에 묶어서 보내는 것이 더 효율적이며 빠르다고 할 수 있다.

BufferedReader 사용하기

// 선언
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 로 읽어온 데이터 가공

BufferedReader 로 읽어온 데이터는 개행문자 단위(줄 단위) 로 나뉜다.
만약 공백 단위로 데이터가 필요하다면, 추가 작업이 필요하다.

이 때, StringTokenizerString.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();

StringTokenizernextToken() 메소드를 사용하면
readLine() 으로 입력받은 값을 공백 단위로 구분해 순서대로 호출할 수 있다.
String.split() 을 사용하면 공백 단위로 끊어 데이터를 배열에 저장하여 사용할 수 있다.

참고
https://st-lab.tistory.com/92
https://rlakuku-program.tistory.com/33

profile
(❁´◡`❁)

0개의 댓글