프로그래머스 코테는 파라미터를 알아서 넘겨 받도록 되어있는데.. 백준은 직접 입력 받아야했다.
Scanner와 sysout을 쓰다가 속도가 너무 느리게 나와서 BufferedReader/Writer에 대해 알아보려고 한다.
목차
1. BufferedReader
2. BufferedWriter
3. 주요 메소드
4. 예제
1. BufferedReader
문자 입력 스트림에서 텍스트를 효율적으로 읽을 수 있도록 문자를 버퍼링
엔터를 통해서만 입력받을 수 있어 ' ' 공백을 이용한 입력받기를 원한다면 StringTokenizer와 함께 사용
2. BufferedWriter
System.out.println()을 대신해 사용하곤 한다.
3. 주요 메소드
메소드명 | 기능 |
BufferedReader(Reader rd) | rd에 연결되는 문자입력 버퍼스트림 생성 |
BufferedWriter(Writer wt) | wt에 연결되는 문자출력 버퍼스트림 생성 |
int read() | 스트림으로부터 한 문자를 읽어서 int 형으로 리턴 |
int read(char[] buf) | 문자배열 buf의 크기만큼 문자를 읽어들임. 읽어들인 문자 수를 리턴 |
int read(char[] buf, int offset, int length) | buf의 offset위치에서부터 length 길이만큼 문자를 스트림으로부터 읽어들임 |
String readLine() | 스트림으로부터 한 줄을 읽어 문자열로 리턴 |
void mark() | 현재우치를 마킹, 차 후 reset() 을 이용하여 마킹위치부터 시작함 |
void reset() | 마킹이 있으면 그 위치에서부터 다시시각, 그렇지 않으면 처음부터 다시시작 |
long skip(int n) | n 개의 문자를 건너 뜀 |
void close() | 스트림 닫음 |
void write(int c) | int 형으로 문자 데이터를 출력문자스트림으로 출력 |
void write(String s, int offset, int length) | 문자열 s를 offset 위치부터 length 길이만큼을 출력스트림으로 출력 |
void write(char[] buf, int offset, int length) | 문자배열 buf의 offset 위치부터 length 길이만큼을 출력스트림으로 출력 |
void newLine() | 줄바꿈 문자열 출력 |
void flush() | 남아있는 데이터를 모두 출력시킴. |
4. 예제
먼저 BufferedReader, InputStreamReader를 사용하기 위해 아래를 import 시켜야한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
BufferedReader/BufferedWriter를 사용하는 메소드에서 try-catch 또는 throws를 이용한 예외처리도 해주어야 한다.
( IOException: 입출력 오류 발생 )
public static void main(String[] arg) throws IOException {
...
}
BufferedReader
String만 받을 수 있기 때문에 형변환은 별도로 해줘야 한다.
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
// 공백으로 구분하기
StringTokenizer st = new StringTokenizer(s);
String s1 = st.nextToken();
String s2 = st.nextToken();
🔻 다양한 형변환
문자열 👉 숫자
Integer.parseInt(str); // string to int
Float.parseFloat(str); // string to float
Double.parseDouble(str); // string to double
Byte.parseByte(str); // string to byte
Long.parseLong(str); // string to long
Short.parseShort(str); // string to short
숫자 👉 문자열
Integer.toString(int);
String.valueOf(long);
String.valueOf(double);
String.valueOf(float);
String.valueOf(boolean);
String.valueOf(char);
String.valueOf(char[]);
🔻 split()과 StringTokenizer
split()과 StringTokenizer은 문자열을 구분자로 자르기 위해 사용한다.
둘의 차이점은 아래 예시와 함께 살펴보자.
split()
String str = "a,b,c";
String[] arr = str.split(","); // ,를 기준으로 {"a","b","c"}로 분리됨
StringTokenizer
String str = "a,b,c"
StringTokenizer st = new StringTokenizer(str, ",");
String a = st.nextToken();
String b = st.nextToken();
String c = st.nextToken();
위 예제만 살펴보면 동일한 방식으로 쪼개는 것처럼 보인다.
아래 예제를 보면 둘의 차이를 확실히 알 수 있을 것이다.
String str = "a*#b*c#d";
// split
String[] arr1 = str.split("*#"); // {"a", "b*c#d"}
for(String a: arr1) {
System.out.println(a);
}
// StringTokenizer
StringTokenizer st = new StringTokenizer(str,"*#"); // "a", "b", "c", "d"
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("test!\n");
System.out.println()과는 달리 줄바꿈 처리가 자동으로 되지 않으니 \n을 이용해야 한다.
참조
- BufferedReader - 공식문서
- BufferedReader와 BufferedWriter - 코딩팩토리
- split과 StringTokenizer 예제 - REAKWON
- BufferedWriter - 공식문서
'Develop > Java' 카테고리의 다른 글
[Java] java.lang.UnsupportedOperationException (1) | 2021.11.21 |
---|---|
Comparator와 Comparable 정리 (0) | 2021.10.21 |
[Jackson] JsonNode, ObjectNode, ArrayNode 차이 (4) | 2021.08.24 |
[Java] 얕은 복사와 깊은 복사 (+Clone) (0) | 2021.06.22 |
[Java] static과 synchronized (0) | 2021.05.26 |