코딩테스트/입출력

입력(Scanner vs BufferedReader) + 입력값 분리(StringTokenizer, .split())

초코chip 2024. 1. 28. 20:13

Scanenr

개념

  • 목적: 적은 양의 입력을 받을 때 사용
  • 특징:
    • 띄어쓰기(space)줄바꿈(enter)를 경계로 입력 값을 인식
    • 가공할 필요가 없음 = 원하는 타입으로 바로 입력 받을 수 있음

 

사용법

Scanner 객체 준비

Scanner sc = new Scanner(System.in);

 

 

문자열 입력

String str = sc.next();

 

 

정수 입력

int a = sc.nextInt();

 

 

BufferedReader

개념

  • 목적: 많은 양 or 빠른 입력을 받을 때 사용
  • 특징:
    • 오로지 줄바꿈(enter)만을 경계로 입력 값을 인식
    • 입력 받은 데이터는 String으로 고정

 

사용법

준비

아래 2가지 처리를 진행

  • 메인함수에 예외 발생 처리 추가
  • BufferedReader 객체 준비
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        
    }

 

 

한 줄 읽기

String str = br.readline();

 

 

띄어쓰기 + 형 변환 적용

아래의 프로세스가 일반적으로 진행

  1. br로 한 줄 읽은 내용을 st(StringTokenizer)객체에 저장
  2. st.nextToken() 메서드를 통해 구분자로 나눠진 내용을 하나씩 가져오기
  3. 하나씩 가져온 내용을 valueOf() 메서드를 통해 형변환 진행

 

예시: 아래 2줄 내용을 읽어오는 코드 

1 2

3 4

//첫번째 줄 읽기 - 1,2
StringTokenizer st = new StringTokenizer(br.readLine());

int a = Interger.valueOf(st.nextToken());
int b = Interger.valueOf(st.nextToken());


//두번쨰 줄 읽기 - 3, 4
st = new StringTokenizer(br.readLine());

int c = Interger.valueOf(st.nextToken());
int d = Interger.valueOf(st.nextToken());