🌱 오늘의 주제 :
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
🌱정의
BufferedReader br = 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"}
🌱 정리
* 참고
'Java' 카테고리의 다른 글
Java - 스트림의 특징과 스트림의 중간연산 (0) | 2023.03.30 |
---|---|
Java - 람다식 (0) | 2023.03.27 |
Java - 쓰레드의 동기화 & wait()과 notify() (0) | 2023.03.23 |
Java - 쓰레드의 상태 (0) | 2023.03.23 |
Java - 쓰레드의 우선순위 & 데몬 쓰레드 (0) | 2023.03.21 |