오늘의 실수 - 0516

한장민·2022년 5월 16일
0

오늘의실수

목록 보기
4/6
post-thumbnail

BUFFEREDREADER에서

READ()와 READLINE()의 차이


착각

BufferedReader를 Scanner와 종류가 다른 것이라고 생각하다보니, 나도 모르게 read()와 readLine()도 nextInt()와 nextLine()에 각각 대입해서 같은 역할이라고 착각했다. 심지어 이클립스에서 read()가 int형을 반환하고 readLine()이 String형을 반환한다고 되어있어 그 착각이 맞다고 여기고 넘어간 것 같다. 이 착각에도 불구하고 여태까지 int형을 입력해 사용할 수 있었던 이유는 처음 BufferedReader의 사용법을 제대로 알게 된 블로그에서 그렇게 사용했기 때문... 학원에서 이미 배운 내용이지만 사용법을 다시 익힌 것도 그렇고 제대로 복습을 안한 탓이다..

read()

nextInt()와 비슷하다고 생각했지만 사실은 입력한 숫자나 문자 중 첫 글자만 아스키코드표를 따라 int형으로 변환하여 나타내는 메소드이다. 그래서 백준 9498번 에서 내가 70점이나 100점을 입력해도 가장 첫 글자인 '7'이나 '1'을 ASCII 형식을 따라 55 나 49로 반환하여 성적이 F가 나오게 된 것이다.(현실고증)

readLine()

readLine()은 내 착각과 다르게 문자열을 입력받는 것이 아니라 스트림으로부터 개행문자를 포함한 입력받은 한 줄을 전부 읽어오는 방식이다. 그래서 BufferedReader를 사용할 때 정수형 값을 입력받기 위해서 readLine()을 int형으로 강제형변환하여 사용한다. 만약 줄바꿈없이 한 줄에서 여러 숫자를 입력받고 싶다면 StringTokenizer를 사용한다. 구분자를 ','나 ' '(공백) 으로 지정하여 한 줄에 여러가지 숫자를 입력받을 수 있다.

참고한 글들
https://aomee0880.tistory.com/88
https://snupi.tistory.com/48
https://rlakuku-program.tistory.com/33

안그래도 StringTokenizer에 대해서도 자세히 알아보고 싶었는데 read와 readLine에 대해 알아보면서 더 알 수 있었다.

profile
HAAN YJGB

0개의 댓글