어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨
[ Java / 백준15552 ] BufferedReader & BufferedWriter 본문
728x90
[ Scanner VS BufferedReader]
[ Scanner ]
- 간단한 입력 처리에 사용
- next(), nextInt(), nextDouble() 등 다양한 데이터 타입을 입력 받을 수 있음
- 한 글자 씩 읽고 처리함
- 띄어쓰기와 개행을 통해 입력 값을 인식
- 큰 데이터에 대한 처리가 느림
[ BufferedReader ]
- String 타입으로만 데이터를 입력 받을 수 있음
- 입력 값을 모아뒀다가 한 번에 처리함
- 개행만을 통해 입력 값을 인식
- 큰 데이터를 읽을 때 Scanner에 비해 처리가 빠름
- IOException을 통해 예외 처리 필요
[ System.out.print() VS BufferedWriter]
[ System.out.print() ]
- 간단한 출력 처리에 사용
- 다양한 데이터 타입을 출력할 수 있음
- println으로 자동 개행 가능
- 큰 데이터에 대한 처리가 느림
[ BufferedWriter ]
- String 타입으로만 테이터를 출력할 수 있음
- 입력 값을 모아뒀다가 한 번에 처리함 - .write()를 통해 버퍼에 데이터를 저장하고 .flush()를 통해 한 번에 출력
- 개행을 따로 하지 않고 \n 또는 .newLine() 사용해야 함
- 큰 데이터를 출력할 때 System.out 보다 처리가 빠름
- IOException을 통해 예외 처리 필요
[ 사용 방법 ]
[ 1. import ]
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; // 콘솔로 입력 & 출력 import java.io.InputStreamReader; import java.io.OutputStreamWriter; // 파일로 입력 & 출력 import java.io.FileReader; import java.io.FileWriter;
[ 2. 예외처리 & 생성자 ]
public class Main { // 예외 처리 throws IOException public static void main(String[] args) throws IOException{ // 콘솔에서 입력 or 출력 BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(System.out)); // 파일로 입력 or 출력 BufferedReader br = new BufferedReader (new FileReader("textFile.txt")); BufferedWriter bw = new BufferedWriter (new FileWriter("textFile.txt")); } }
[3. 입력 & 출력]// BufferedReader는 String 타입으로 값을 받아온다. String inputData = br.readLine(); // 그래서 다른 데이터 타입으로 받고자 한다면 형변환 해줘야 함! int inputInt = Integer.parseInt(br.readLine()); // 혹은 int inputInt = Integer.parseInt(inputData); // BufferedWriter에 데이터 저장 bw.write(inputInt); bw.write("\n"); // 개행1 bw.newLine(); // 개행2 // BufferedWriter는 String 타입으로 값을 출력한다. // 그래서 다른 데이터 타입을 출력할 경우 먼저 String으로 형변환 해줘야 함! int num = 122; bw.write(num); // 오류 발생 bw.write(Integer.toString(num)); // 출력됨 bw.write(String.valueOf(num)); // 출력됨 // toString과 String.valueOf의 차이점 // toString에 null 값이 입력됐을 경우 NullPointerException 에러 // String.valueOf는 null 값이 입력됐을 경우 문자열 "null" 출력 // BufferedWriter에 저장되어있는 데이터 한 번에 출력하기 bw.flush(); // BufferedReader & Writer 종료 br.close(); bw.close();
[ readLine()으로 받은 문자열(String) 나누기 ]// BufferedReader는 Scanner와 다르게 공백을 제외한 개행만으로 데이터를 나눈다. // 입력 받은 데이터가 공백 단위로 끊는 방법 // 입력 받은 데이터가 2 3 4 일 경우 각각 정수 2, 3, 4로 따로 담아주는 방법 // BufferedReader와 BufferedWriter의 사용 준비는 모두 이미 되어있다고 가정 ------------------------------------------------------------------------------------- // 1. StringTokenizer 사용 import java.util.StringTokenizer; StringTokenizer strSlice = new StringTokenizer(inputData); // 혹은 StringTokenizer strSlice = new StringTokenizer(br.readLine()); int num1 = Integer.parseInt(strSlice.nextToken()); int num2 = Integer.parseInt(strSlice.nextToken()); int num3 = Integer.parseInt(strSlice.nextToken()); ------------------------------------------------------------------------------------- // 2. split 사용 // split 문자열을 입력 받은 인수를 기준으로 나누어 배열로 반환한다. // split(" ")는 공백을 기준으로 split("-")는 -를 기준으로 나눈다. String[] strArr = inputData.split(" "); int num1 = Integer.parseInt(strArr[0]); int num2 = Integer.parseInt(strArr[1]); int num3 = Integer.parseInt(strArr[2]); ------------------------------------------------------------------------------------- // 3. charAt 사용 // 문자열을 문자열 하나 char로 떼어내 준다. // 공백도 문자열에 포함되기 때문에 공백까지 떼어내 주기 때문에 인덱스를 하나 씩 넘겨야 함 // 입력 받은 문자열이 숫자일 경우 숫자 그대로 문자열로 만들어주지 않는다. // 아스키코드로 변환하기 때문에 숫자 그대로 출력하고 싶으면 - '0' 해줘야 함 char num1 = inputData.charAt(0); char num2 = inputData.charAt(2); char num3 = inputData.charAt(4);
문자열을 끊는 방법 중 1번 StringTokenizer와 2번 split만 사용해서 풀어봤는데
StringTokenizer는 속도 880m/s 길이 905B
split는 속도 1200m/s 길이1042B 나왔다.
728x90
'Back - end > JAVA' 카테고리의 다른 글
| [ Java / 백준 10809] 문자열에서 특정 문자를 찾는 방법 (배열,indexOf, contains,IntStream) (0) | 2023.09.05 |
|---|---|
| [ Java ] Arrays 클래스 (0) | 2023.09.03 |
| 23.05.11 / MVC 패턴 - 회원가입 , 서블릿(Servlet) (0) | 2023.05.11 |
| 23.05.10 / MVC 패턴 (0) | 2023.05.10 |
| 23.03.28 / jsp - session 내장 객체 이용한 로그인 후 권한 관리 (0) | 2023.03.28 |