◆ Scanner
: 입력받을 때 정수값과 소수값, 문자데이터를 구분지어 읽어들인다.
- 장점: 직관적이며 사용하기 편리하다.
- 단점: 키보드의 키를 입력하는 즉시 바로 전달되어 BuffredReader보다 속도가 느리다.
◆ BufferedReader
: 입력받을 때 그 값을 8,192 char(16,384 byte) 크기의 버퍼에 담아놓았다가 한번에 전달한다.
- 개행문자만 경계로 인식하고, 입력된 데이터의 형식은 String으로 고정되므로 데이터를 따로 가공해야 한다.
cf. Scanner: 띄어쓰기와 개행문자를 기준으로 입력값을 인식하므로 데이터를 따로 가공할 필요 없다.
- BufferedReader를 사용할 땐 무조건 예외 처리를 해야 한다. (try ~ catch문 또는 throws IOException)
- 입력받기 위해 readLine()을 사용한다.
- 데이터가 문자값으로 받아지므로 숫자값을 받을 땐 형변환을 해야 한다.
◆ 많은 양의 데이터를 입력받을 때
: split이나 StringTokenizer를 사용하면 된다.
- split: 입력을 받는 동시에 배열로 데이터를 받아온다.
정규식을 기반으로 문자열을 자른다.
- StringTokenizer: 입력받을 때 Token화된 문자열을 다시 처리해야 한다.
공백인 부분들은 당겨서 채운다. (split보다 빠름)
- StringTokenizer 생성자에서 구분자를 작성하지 않았을 때에 데이터는 띄어쓰기로 구분된다.
- 구분자를 사용하려면 StringTokenizer st = new StringTokenizer(문자열, 구분자);
- countTokens(): 배열을 생성하면서 크기를 정할 때 사용하며, 총 token 수를 리턴받는다.
- hasMoreTokens(): token이 더이상 없을 때 false를 리턴한다.