✔️ Scanner와 유사
✔️ Import가 추가적으로 필요
✔️ System.out.print와 유사
✔️ Import가 추가적으로 필요
✔️ 기존의 쓰던 Scanner와 System.out.print보다 속도 측면에서 훨씬 빠르다
➖ 입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성을 높임
➖ 많은 양의 데이터를 처리하는데 용이함
❗ BufferedReader은 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 가공하는 작업이 필요한 경우가 많다import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public static void selectActivity(ArrayList<Activity> list) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = bf.readLine(); // String
int i = Integer.parseInt(bf.readLine()); // Int
StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출
String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
Read한 데이터는 Line단위로만 나눠지기 때문에 공백 단위로 가공하려면 따로 작업을 해주어야한다.
StringTokenizer
StringTokenizer에 nextToken() 함수를 사용하여 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출할 수 있다.
→ BufferedReader 클래스가 아니더라도 ,(컴마)로 구분되는 문자열들을 분리하는 등 특정문자에
따라 문자열을 나누고 싶을 때 사용 가능
1. StringTokenizer st = new StringTokenizer(문자열);
-> 띄어쓰기 기준으로 문자열을 분리
2. StringTokenizer st = new StringTokenizer(문자열, 구분자);
-> 구분자를 기준으로 문자열을 분리
3. StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);
-> 구분자를 기준으로 문자열을 분리할 때
true = 구분자도 토큰에 포함
false = 구분자는 분리된 문자열 토큰에 미포함
default = false
.split(” “)
split() - 괄호 안에 구분자를 입력하여 구분자를 기준으로 문자열을 분리
StringTokenizer은 java.util에 포함되어 있는 클래스, split은 String 클래스에 속해있는 메소드
StringTokenizer은 문자, 문자열로 구분한다면, split은 정규표현식으로 구분한다
StringTokenizer은 빈 문자열을 토큰으로 인식하지 않지만 split은 인식한다
StringTokenizer은 결과 값이 문자열이라면 split은 결과 값이 문자열 배열이다.
→ StringTokenizer 이용 시, 전체 토큰을 보려면 반복문을 이용해 하나하나 뽑아야 함
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//할당된 버퍼에 값 넣어주기
String s = "abcdefg"; //출력할 문자열
bw.write(s+"\n"); //버퍼에 있는 값 전부 출력
bw.flush(); //남아있는 데이터를 모두 출력시킴
bw.close(); //스트림을 닫음
✔️ Bufferedwriter의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close()를 호출해야한다.
✔️ Bufferedwriter는 정수 출력이 불가능 하다. 다음과 같이 String형으로 변환 후 출력해야한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num1 = Integer.parseInt(bf.readLine());
bw.write(String.valueOf(num1 - 543));
bw.flush();
bw.close();
}
}