개요
앞으로도 BufferedReader를 사용하며 자주 언급할 것 같아 한번에 정리해두고자 작성했다.
본론
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
자주사용하는 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 을 분석해보도록 하겠습니다.
먼저 가장 안쪽에 있는 System.in은 콘솔에서 데이터를 입력받을 때 사용하고, inputStream 타입의 필드인 System클래스의 in 정적필드입니다. System.in으로 받은 Inputstream 객체에 read함수를 실행하면 1byte밖에 읽지 못해 2byte인 한글은 읽을 수 없습니다. 그래서 InputStreamReader을 사용하게 됩니다.
InputStreamReader는 InputStream객체를 입력으로 갖고있어야하기 때문에 new InputStreamReader(System.in)과 같은 형태가 된것입니다. 그리고 InputStreamReader가 되면서 byte로 받는 수준에서 char로 받을 수 있게 되었습니다. 하지만 배열크기를 일일이 지정해줘야해서 불편함이 남아있었습니다.
그래서 사용된게 최종으로 사용된 BufferedReader입니다. BufferedReader는 InputStreamReader를 입력받아 문자열을 출력해줍니다. BufferedReader는 \n이 입력되기 직전까지 받은 모든 텍스트를 저장하고 stream이 다 차거나 null이 아니라면 그 값을 계속 갖고있습니다. 그리고 데이터를 많이 입력받을 경우 Scanner보다 메모리적으로 더 효율적입니다.
활용
String >>
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
한 줄을 읽어 String 타입으로 값을 가져올 때 사용합니다.
ex. 행복한 코딩시간 --> "행복한 코딩시간"
String[] >>
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] strArrN = reader.readLine().split(" ");
한 줄을 읽어 " " 을 기준으로 나눠 String array를 가져올 때 사용합니다.
ex. 나는 오늘 밥을 먹었다. --> {"나는", "오늘", "밥을", "먹었다"}
int >>
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int i = Integer.parseInt(reader.readLine());
한 줄을 읽어 string 타입의 숫자를 읽어 int로 형변환을 해 저장합니다. 한 줄에 숫자가 하나만 있을 때 사용할 수 있습니다. (문자나 숫자를 제외한 값이 있을 경우 에러 발생)
ex. 3 --> 3
int[] & Sort >>
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] strArrN = reader.readLine().split(" ");
arrAList = new int[n];
for(int i =0;i<n;i++) arrAList[i]=Integer.parseInt(strArrN[i]);
Arrays.sort(arrAList);
String[]를 하나씩 빼내어 int형으로 변환해 int[]에 넣어줍니다.
ex. {"3","9","-2","0","-100"} --> {3,9,-2,0,-100}
Arrays.sort(배열)을 통해 파라미터로 넣은 배열을 오름차순으로 정렬해줍니다. (내림차순인 경우 구글에 "java comparator"를 검색하시면 다양한 방법을 금손분들께서 설명해주실 겁니다...)
ex. {3,9,-2,0,-100} --> {-100,-2,0,3,9}
ex. {"a","t","i","o"} --> {"a","i","o","t"}
마무리
정리하면 다음 표와 같습니다. 이렇게 정리하고나니 다음엔 안헷갈릴것 같네요!! ㅎㅎ
InputStream(= System.in) | InputStreamReader | BufferedReader | |
읽어오는 함수 | read() | read() | readLine() |
단위(함수 리턴 타입) | byte | char | String |
단점 | 한글을 읽을 수 없다. | 배열크기 지정이 번거롭다. | 앞선 경우를 다 담아야해서 치기 귀찮다(?) |
'알고리즘(JAVA 사용)' 카테고리의 다른 글
[코딩테스트 준비] 프로그래머스 lv.1 skill check 통과! (0) | 2021.05.31 |
---|