본문 바로가기
공부/알고리즘

자바 입출력 팁 : StreamTokenizer

by Austin-Choi 2026. 5. 14.
public class Main {
    static final StreamTokenizer st 
    	= new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static int N;
    static ArrayList<Integer>[] g;

    static int read() throws Exception {
        st.nextToken();
        return (int) st.nval;
    }

    public static void main(String[] args) throws Exception{
        N= read();
        g = new ArrayList[N+1];
        for(int i = 1; i<=N; i++)
            g[i] = new ArrayList<>();
        
        int M = N-1;
        while(M-->0){
            int u = read();
            int v = read();
            g[u].add(v);
            g[v].add(u);
        }
    }
}

설명

원래 BufferedReader + InputStreamReader를 썼었는데 BufferedReader를 생성값으로 받는

StreamTokenizer라는게 있었다. 

말하자면 입력 스트림 자체를 토큰화해서 read하는건데 

Reader r = new BufferedReader(new InputStreamReader(is));
StreamTokenizer st = new StreamTokenizer(r);
return (int) st.nval;

이런식으로 쓴다. 

nval말고 sval도 있는거 보면 이건 string value인듯 싶다. 

 

Modifier and Type

자료형 필드명 설명
double nval 현재 토큰이 숫자인 경우 이 필드에는 해당 숫자의 값이 포함된다
String sval 현재 토큰이 단어 토큰인 경우 이 필드에는 단어 토큰의 문자를 제공하는 문자열이 포함된다.

 

공식 문서에 기재된 StreamTokenizer의 설명이다.

 

참고 : https://docs.oracle.com/javase/8/docs/api/java/io/StreamTokenizer.html