자바를 배우면서 사용자에게 입력을 받을 때 가장 먼저 사용법을 배우는 것은 Scanner 일것이다. 스캐너에 비해 BufferedReader은 다소 사용하기 불편할 수도 있지만, 많은 양의 데이터를 입력 받을 경우 작업속도에서 차이가 많이난다
-> 알고리즘에 효율적
// 사용하기 위한 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 버퍼리더는 기본적으로 String 으로 타입이 고정되어 있기 때문에
String s = br.readLine();
// 다른 타입으로 사용하려면 형변환이 필요하다
int i = Integer.parseInt(br.readLine());
readLine() 으로 입력받을 때 주의해야할 점이 있다면 예외처리를 꼭 해줘야한다는 것이다.
try-catch
문으로 예외처리를 해주었고,try {
BufferedReader br = new BufferedReader (new
InputStreamReader(System.in));
System.out.println("입력");
String ss = br.readLine();
int num = Integer.parseInt(br.readLine());
// 입력 끝나면 닫아주기
br.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
try {
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
// 파일에서 입력 받을 경우
FileReader fr = new FileReader("Array.java");
BufferedReader br_f = new BufferedReader(fr);
br.close();
// 파일의 한 줄 한 줄 읽어서 출력
String line = "";
for(int i=1; (line = br_f.readLine()) != null; i++) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
String클래스를 보면 split 함수가 있다.
String[] 배열명 = 문자열.Split("구분할 특정 문자");
특정 문자를 기준으로 문자열을 잘라 배열에 삽입해주는 함수인데, 원하는 구분자로 자를 수 있어 여러 data에 유용히 활용 가능할 것 같다.
사용 예시는 아래와 같다.
1. 반점(,) 기준으로 자르기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("입력 >>");
String str = br.readLine();
// 문자열을 반점(,) 기준으로 잘라 strArr 배열에 삽입
String[] strArr = str.split(",");
for (int i=0; i<strArr.length; i++) {
System.out.println(strArr[i]);
}
아래 실행 결과를 보면 반점을 기준으로 문자가 구분되어 있는 모습을 확인할 수 있다.
strArr[0] = 내일은
strArr[1] = 내일의
strArr[2] = 해가
...
strArr[8] = 자자
이런식으로 잘려 들어가는 것이다
실행 결과
String str = "언제나 건강이 가장 중요해요";
// 문자열을 반점(,) 기준으로 잘라 strArr 배열에 삽입
String[] strArr = str.split(" ");
for (int i=0; i<strArr.length; i++) {
System.out.println(strArr[i]);
}
실행결과
system.out.print("")
와 동일하게 사용 가능한 함수
write("출력할 문자열")
: 출력할 문자를 적어준다. \n 기능이 없기 때문에
출력과 동시에 개행을 해주려면 \n을 넣어주어야 한다.
newLine()
: \n 기능을 해준다.
flush() : 남아있는 데이터가 있다면 모두 출력해준다
close() : 스트림을 닫아준다.
버퍼를 이용하는 것이기 때문에 사용을 다 한 뒤에는 버퍼를 클린하게 해줘야한다.
사용모습
public class Main{
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new
OutputStreamWriter(System.out));
String str = "안녕";
bw.write(str);
bw.newLine();
// write에 개행을 넣어주지 않으면
// 붙어 출력된다
bw.write("hello");
bw.write(" Hi \n");
bw.write(str + "\n");
bw.flush();
bw.close();
}
}
// ---------------------
// (출력모습)
// 안녕
// hello Hi
// 안녕