본문 바로가기
Language/Java

[Java] BufferedReader, BufferedWriter / 자바 문자 입력받기

by 애기 개발자 2022. 11. 20.
반응형

알고리즘 문제를 풀다 보면

 

공백으로 입력받는 경우, 줄간 입력받는 경우 등 다양하게 입력받을 수 있어야 하며

 

이때 그냥 scanner 기능으로 입력받는 게 아닌 빠른 속도로 입력받기 위해 BufferedReader와

 

빠르게 출력하기 위한 BufferedWriter 기능을 쓸 줄 알아야 한다.

 

Scanner / BufferedReader 차이

Scanner

  • 입력을 받을 때 공백(space)과 개행(enter)을 모두 경계로 인식한다.
  • next(), nextInt(), nextchar() 등 형태를 지정 가능

BufferedReader

  • 개행(enter)으로만 경계 인식
  • String 형태로만 저장됨 (형 변환이 필요)
  • Scanner에 비해 월등히 빠른 속도

위와 같이 구분 가능하다.

 

정수 하나만 받을 때

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());

br.readLine으로 받은 String 형태를 Integer.parseInt로 int형 변환을 통해 정수 하나를 저장할 수 있다.

 

공백으로 구분된 정수 여러 개

 

1. StringTokenize 사용

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());

1 2 3 이 입력되면

 

각각 m, n, k에 1, 2, 3이 저장된다.

 

 

2. split(" ") 사용

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
String [] arr = s.split(" ");

int m = Integer.parseInt(arr[0]);
int n = Integer.parseInt(arr[1]);
int k = Integer.parseInt(arr[2]);

일단 문자열 형태로 입력받은 후 split을 통해 잘라서 각각 저장해주는 방법도 있다.

 


System.out.println() / BufferedWriter

위의 Scanner / BufferedReader와 똑같다. 입력이냐 출력이냐의 차이일 뿐

 

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

for(int i=0; i<a; i++) {
	for(int j=0; j<b; j++) {
    	for(int k=0; k<c; k++) {
        	bw.write(i+j+k);
        }
    }
}
bw.flush(); //남아있는 데이터 모두 출력
bw.close(); //마지막으로 끝

 

반응형

댓글