반응형

[JAVA] 자바 BufferedReader 사용법


자바에서 입력을 받을 때 Scanner 클래스로 입력을 받아왔었다.

BufferedReader가 사용하기 불편해서 Scanner가 등장한 걸로 알고 있지만 백준 문제를 풀다 보면 Scanner를 사용했을 때

입력 자체에서 시간 초과가 걸리는 경우가 많아서 BufferedReader를 다시 사용하게 되었다.

 

 

Scanner는 내부적으로 정규 표현식이 너무 많이 적용되어있어서 parse 할 때는 편리하지만, 성능이 희생당한다.

 

 

추가로 출력을 해주는  BufferedWriter도 있지만, 출력을 할 때 StringBuilder에 담아서 출력만 해도 출력 시간 초과는 해결된다.

이 글에서는 BufferedReader만 간단하게 사용하는 법을 정리하기로 했다.

 

 


BufferedReader 사용법

 

 

1
2
3
4
5
6
7
8
9
10
11
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class BR {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        System.out.println(str);
    }
}
cs

 

사용하기 위해선 3가지 코드를 작성해주어야 한다.

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import를 이런식으로 따로 해주거나

 

 
import java.io.*;
한번에 import를 처리해줘도 된다.

 

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

두개의 보조 스트림 BufferedReader, InputStreamReader를 사용해서 입력 객체를 생성해준다.

 

main함수에 throws IOException를 추가해주면 기본적인 준비는 마쳤다.

 
이제 br.readLine() 메서드로 입력을 받아줄 수 있다.

고려해야할 점은 br.readLine()의 return은 String이므로 String으로 입력을 받아야한다.

또한 BufferedReadr는 Line 단위로 읽는다.

 

자주 사용하는 추가적인 함수들

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.*;
import java.io.*;
 
public class BR {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        System.out.println(str);
 
        // 정수 변환시
        int n = Integer.parseInt(str);
 
        // 문자를 자를 시
        StringTokenizer st = new StringTokenizer(br.readLine());
        String str1 = st.nextToken();
        int m = Integer.parseInt(st.nextToken());
 
        String[] strs = br.readLine().split(" ");
 
    }
}
 
cs

 

 

문자를 입력을 받은 경우 보통 두 가지 경우가 발생한다.

  • 입력받은 문자를 숫자로 변환할 경우 
  • 입력받은 문자를 특정 문자 기준으로 자를 경우

 

11줄) 문자를 숫자로 변환할 경우는 Integer.parseInt()로 변환해주면 된다.

 

문자를 특정문자 기준으로 자를 경우 두 가지 방법이 가능하다.

14줄) StringTokenizer를 사용할 경우 StringTokenizer 생성자에 입력받을 문자를 넣은 후, nextToken() 함수로 하나 씩 가져와 사용할 수 있다.

공백이 아닌 특정 문자 기준으로 자르고 싶을때에는 new StringTokenizer(br.readLine(), "자를문자");

 

18줄) String.split()을 사용할 경우 반환을 String [] 배열로 받아주어야 한다. split() 함수의 인자로 자를 문자를 입력하면 된다.

 

 


 

반응형

+ Recent posts