ComputerScience/Java

BufferedReader와 StringTokenizer

imachill7guy 2025. 2. 24. 13:38

BufferedReader란?

BufferedReader는 빠른 입력을 위해 사용하는 Java 클래스

  • Scanner보다 입력 속도가 빠름
  • 버퍼(기본 8192바이트) 를 사용해 여러 문자를 한 번에 읽어옴
  • 입력 속도가 중요한 문제 (예: 백준, 코딩 테스트) 에서 주로 사용됨

📌 사용법

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

public class StringTokenizerExample {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String input = br.readLine(); // 한 줄 입력 받기
        StringTokenizer st = new StringTokenizer(input); // 기본적으로 공백 기준으로 분리

        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken()); // 한 개씩 출력
        }
    }
}
 

📌 특징

  • readLine()은 한 줄(문자열 전체) 을 입력받음 (공백 포함)
  • 숫자를 입력받을 때는 Integer.parseInt()로 변환 필요
  • 예외 처리 (IOException) 필요

StringTokenizer란?

StringTokenizer는 문자열을 특정 기준(공백, 쉼표 등)으로 분리하는 클래스야.

  • split()보다 메모리 사용량이 적고 빠름
  • 주어진 문자열을 토큰(단어 단위로 나눈 값)으로 분리
  • 백준 등 알고리즘 문제에서 입력을 빠르게 처리할 때 사용

📌 사용법

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

public class StringTokenizerExample {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String input = br.readLine(); // 한 줄 입력 받기
        StringTokenizer st = new StringTokenizer(input); // 기본적으로 공백 기준으로 분리

        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken()); // 한 개씩 출력
        }
    }
}

📌 특징

  • StringTokenizer(input, 구분자) → 특정 구분자로 문자열을 분리
  • st.hasMoreTokens() → 남은 토큰이 있는지 확인
  • st.nextToken() → 다음 토큰 반환

📌 예제 입력 & 출력

입력값

 
10 20 30 40 50

출력값

10
20
30
40
50

🚀 📌 BufferedReader + StringTokenizer 조합 (빠른 입력 처리)

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

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

        int N = Integer.parseInt(br.readLine()); // 첫 줄에서 정수 입력 받기
        StringTokenizer st = new StringTokenizer(br.readLine()); // 두 번째 줄을 공백 기준으로 분리

        int sum = 0;
        while (st.hasMoreTokens()) {
            sum += Integer.parseInt(st.nextToken()); // 문자열을 정수로 변환해 더하기
        }

        System.out.println(sum);
    }
}

🛠 BufferedReader + StringTokenizer 조합의 장점

✅ BufferedReader → 빠른 입력
✅ StringTokenizer → 공백 기준으로 빠르게 분리
✅ Integer.parseInt() → 정수 변환


🎯 정리

방법입력 속도특징사용 예제

Scanner 느림 간편, 기본 제공 일반적인 입력 처리
BufferedReader 빠름 한 줄 단위로 읽기 대량 데이터 입력
StringTokenizer 빠름 공백 기준으로 분리 공백/쉼표 기준 문자열 분리

 

✔ 추천 사용법:

  • 단순한 입력: Scanner
  • 긴 줄 입력: BufferedReader
  • 공백 구분 데이터: StringTokenizer

🚀 코딩 테스트에서는 BufferedReader + StringTokenizer 조합이 가장 빠르다!