개발 공부 기록

[Java] BufferedReader, StringTokenizer 클래스 사용방법 본문

JAVA/Concept

[Java] BufferedReader, StringTokenizer 클래스 사용방법

나만없서고냥이 2023. 8. 4. 01:53

BufferedReader란?

Java에서 텍스트를 읽을 때 사용하는 클래스로, 버퍼링 기능을 제공합니다. 이 클래스는 Reader 클래스를 확장하며, 버퍼를 사용해 한 번에 여러 문자를 읽어 오는 것이 가능하여 큰 파일이나 스트림에서 효율적인 읽기 작업이 가능합니다.

 

StringTokenizer란?

Java에서 어떠한 문자열을 특정 구분자를 기준으로 여러 토큰으로 분할할 때 사용됩니다. 이 클래스는 문자열을 처리하고 각 토큰을 순차적으로 가져오는 방법을 제공합니다.

 

알고리즘 문제를 풀 때, BufferedReader과 StringTokenizer를 같이 사용하는 경우가 많습니다. BufferedReader로 라인을 읽고, 해당 라인에서 특정 문자열을 읽을 경우 StringTokenizer를 사용합니다.

일반적으로 많이 사용하는 경우는 new StringTokenizer(br.readLine())로 라인을 읽는 동시에 문자열을(혹은 그외) 공백 단위로 읽어들이는 라인을 추가하고, nextToken()으로 해당 라인에서 공백 단위로 읽는 상황입니다.

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

        StringTokenizer st = new StringTokenizer(br.readLine()); //공백 단위로 읽어들이는 라인 추가
        int a = Integer.parseInt(st.nextToken()); //해당 라인에서 공백 단위로 읽음
        int b = Integer.parseInt(st.nextToken()); //해당 라인에서 공백 단위로 읽음
        System.out.println(a + " " + b);
    }
}

 

혹은 new StringTokenizer(br.readLine(), ",")로 라인을 읽는 동시에 문자열을 "," 단위로 읽어들이는 라인을 추가하고, nextToken()으로 해당 라인에서 "," 단위로 읽어들이도록 사용할 수도 있습니다.

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

        st = new StringTokenizer(br.readLine(),","); // , 단위로 읽어들이는 라인 추가
        int c = Integer.parseInt(st.nextToken()); //해당 라인에서 , 단위로 읽음
        int d = Integer.parseInt(st.nextToken()); //해당 라인에서 , 단위로 읽음
        System.out.println(c + " " + d);
    }
}

 

hasMoreTokens() 사용법

StringTokenizer에서 hasMoreTokens()도 유용하게 쓰입니다. hasMoreTokens()이란 토큰화된 문자열에서 현재 더 읽을 토큰이 있는지의 여부를 boolean 값으로 반환합니다. 이는 토큰을 순차적으로 읽을 때 유용하며, 일반적으로 nextToken()과 함께 사용됩니다.

String input = "jieun tistory blog"
StringTokenizer st = new StringTokenizer(input, " ");

while(st.hasMoreTokens()) {
	String token = st.nextToken();
    System.out.println(token);
}

hasMoreTokens() 사용 시 문자열의 끝에 도달할 때까지 토큰을 안전한게 읽을 수 있으며, 이는 nextToken() 호출 시 NoSuchElementException이 발생하는 것을 방지합니다.


References