본문으로 바로가기

[Java] BufferedReader, BufferedWriter 사용법

category 언어/Java 2020. 10. 29. 17:04
728x90

 

 

기본 개념

 

- Scanner : 입력을 받을 경우, 공백(space)이나 Enter를 모두 경계로 인식함

               nextInt(), next(), nextchar() 등 다양한 형식의 데이터 입력가능

 

- BufferedReader : Enter만 경계로 인식함

                               String로만 데이터 인식

                               장점 : 알고리즘의 시간을 줄일 수 있다.

               

 

형변환을 통한 BufferedReader 사용 방법

 

1. 공백을 포함하지 않는 Int형

 

1
2
3
4
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int n = Integer.parseInt(br.readLine()); 
 
 
 

 

BufferedReader를 통한 선언 -> readLine() 메소드를 통해 String으로 입력받음

          -> Integer.parseInt() 메소드를 통한 형변환

 

 

 

2. 공백을 포함하는 경우의 Int형

 

방법 1> StringTokenizer 이용 (Default값 = " ")

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Example {
    
    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());
        int c = Integer.parseInt(st.nextToken());
        
        System.out.println("a의 값:"+a+", b의 값 :"+b+", c의 값 :"+c);
    }
}
 
 
 
 

 

 

 

 

출력 결과

 

 

 

배열에서의 사용

 

1
2
3
4
5
6
7
8
9
10
11
12
13
String s1=br.readLine();
StringTokenizer st1=new StringTokenizer(s1);
        
for(int i=0;i<road.length;i++) {
    road[i]=Long.parseLong(st1.nextToken());
}
String s2=br.readLine();
StringTokenizer st2=new StringTokenizer(s2);
        
for(int i=0;i<liter.length;i++) {
    liter[i]=Long.parseLong(st2.nextToken());
}
        
 
 

 

입력받은 문자열을 StringTokenizer에 넣은 후, nextToken() 메소드를 통해 공백단위로 인식.

 

 

방법 2> String.split() 메소드 이용

 

1
2
3
4
5
6
7
8
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        
String s=br.readLine();            
String arr[]=s.split(" ");
 
int a=Integer.parseInt(arr[0]);
int b=Integer.parseInt(arr[1]);
int c=Integer.parseInt(arr[2]);
 
 

 

문자열을 split() 메소드를 통해 공백 단위의 분할 후 문자열 배열에 저장

-> 각 문자열 배열에 저장된 값을 Integer.parseInt() 메소드를 통해 정수형으로 변환

 

 

BufferedWriter 사용방법

 

1
2
3
4
5
6
7
8
9
10
11
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+"\n");
        }
    }
}
bw.flush();
bw.close();
 
 

 

BufferedWriter를 통해 선언 후, System.out.println()이 아닌 bw.write()를 이용해 출력

bw.flush() -> 남아있는 데이터 모두 출력

bw.close() -> 스트림을 닫음

 

728x90