BufferedReader 와 StringTokenizer

journey·2025년 2월 17일

BufferedReader와 StringTokenizer는 Java에서 입력을 빠르고 효율적으로 처리하는 도구이다.
특히 많은 데이터를 입력받을 때 Scanner보다 더 빠르게 처리 가능

  1. BufferedReader - 빠른 입력 처리
    📌 개념: BufferedReader는 입력 속도를 높이기 위해 버퍼를 사용하는 클래스이다.
  • 기본적으로 System.in (키보드 입력)을 사용하지만, 한 줄씩 읽는 방식으로 동작한다.
  • readLine() 메서드를 사용하여 한 줄 단위로 문자열을 입력받고, 필요하면 변환해서 사용한다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderExample {
    public static void main(String[] args) throws IOException {
        // BufferedReader 객체 생성
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 한 줄 입력 받기
        String input = br.readLine();

        System.out.println("입력값: " + input);
    }
}

📌 BufferedReader 특징
✅ 빠름 → Scanner보다 성능이 좋음
✅ 한 줄 단위로 입력받음 (readLine())
✅ 공백 포함된 문자열도 입력 가능
❌ 숫자로 변환하려면 Integer.parseInt() 등을 사용해야 함
❌ 공백을 기준으로 여러 개의 값을 입력받기 어려움 → 그래서 StringTokenizer를 함께 사용


2. StringTokenizer - 문자열을 특정 기준으로 나누기
📌 개념: StringTokenizer는 공백이나 특정 구분자로 문자열을 분리하는 도구이다.
  • 기본적으로 공백을 기준으로 나누지만, 원하는 구분자를 지정할 수도 있음
  • split() 메서드와 유사하지만, 메모리 사용량이 적고 속도가 빠름

3. BufferedReader + StringTokenizer 조합
- BufferedReader.readLine() → 한 줄 전체 입력받기
- StringTokenizer → 공백이나 특정 구분자로 나누기
- Integer.parseInt() → 숫자로 변환

📌 예제: 여러 개의 숫자 입력받기

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BufferedReaderStringTokenizer {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("공백으로 구분된 숫자를 입력하세요:");
        StringTokenizer st = new StringTokenizer(br.readLine());

        while (st.hasMoreTokens()) {
            int num = Integer.parseInt(st.nextToken());
            System.out.println("입력된 숫자: " + num);
        }
    }
}

Result)
공백으로 구분된 숫자를 입력하세요:
5 10 15 20
입력된 숫자: 5
입력된 숫자: 10
입력된 숫자: 15
입력된 숫자: 20

📌 Scanner vs BufferedReader + StringTokenizer 비교

비교 항목ScannerBufferedReader + StringTokenizer
입력 속도느림 (nextInt() 등 메서드 호출 시 내부에서 추가적인 파싱이 발생)빠름 (readLine()으로 한 번에 입력받고 StringTokenizer로 분리)
입력 방식한 번에 하나씩 입력 (next(), nextInt() 등)한 줄 전체 입력 후 분리 (readLine() + StringTokenizer)
공백 포함 문자열nextLine() 사용 필요readLine()으로 쉽게 처리 가능
정수 입력nextInt() 사용 가능Integer.parseInt(st.nextToken()) 사용해야 함
입력 종료 감지hasNext() 메서드 지원st.hasMoreTokens() 사용
사용 편의성직관적이고 간편함변환 과정 필요하지만 대량 입력에 유리
적합한 상황입력 데이터가 많지 않을 때대량의 데이터 입력이 필요할 때

결론

  • Scanner간단한 입력 처리 시 사용하기 좋음.
  • BufferedReader + StringTokenizer빠른 입력이 필요할 때 (예: 백준, 프로그래밍 대회 등).
profile
개발 여정

0개의 댓글