#Scanner 클래스
Scanner 클래스 특징
1. 기본적인 데이터 타입들을 Scanner의 메소드를 사용하여 입력받을 수 있다.
2. Scanner을 사용할 시 util 패키지를 경로의 Scanner 클래스를 호출해야 한다.
3. 공백(띄어쓰기)또는 개행(줄 바꿈)을 기준으로 읽는다
Scanner의 입력 메소드들은 대부분 공백과 개행(' ', '\t'(tab), '\r', '\n(enter)' 등등)을 기준으로 읽는다. 이 덕분에 사용자의 편의에 따라 쉽게 입력받을 수 있다.
Scanner 클래스 사용
java.util 패키지의 Scanner 클래스를 이용하면 콘솔로부터 기본 타입의 값을 바로 읽을 수 있다. Scanner 객체를 생성하려면 다음과 같이 생성자에 System.in 매개값을 주면 된다.

Scanner 클래스에서 3개의 메소드를 사용해보았는데 각각 메소드에 맞게 알맞는 데이터 타입의 값으로 리턴해준다. 이 중 문자열을 입력받아 리턴하는 nextLine()메소드가 많이 쓰인다. 이 메소드는 String타입으로 리턴해주는데 이것과 같은 타입의 메소드로 nxet()가 있다.
#next()와 nextLine()메소드의 차이

위 코드를 보면 next()메소드는 '안녕하세요'만 반환한것을 알 수 있다. nextLine()과 next()메소드의 차이는 nextLine()메소드는 공백 문자와 상관 없이 콘솔 창 한 줄(Line)에 있으면 모두 문자열로 인식해서 Enter를 치기 전까지 쓴 문자열을 모두 리턴한다는 것이고 next() 메소드는 토큰의 개념으로 문자열을 입력받는데, 스페이스 즉 공백 전까지 입력받은 문자열을 리턴한다는 것이다. 그래서 공백이 있는 문자열 한줄을 리턴받고 싶으면 nextLine() 메소드를 사용하고 그냥 한 단어만 쓰고 싶다면 next()를 쓰는 것이지만 nextLine()을 써도 상관 없다.

nextInt()메소드 다음에 nextLine()메소드를 실행하려고 할 때 nextLine()메소드가 그냥 넘어가버리는 오류가 생겨난다. 이 이유는 nextInt()메소드를 실행할 때 20을 콘솔에 입력하고 엔터를 누를 때 20을 리턴시켰지만 개행문자(Enter값)는 그대로 남아있다. nextLine()메소드는 Enter값을 기준으로 메소드를 종료시키기 때문에 nextLine()메소드가 실행될 때 남아있는 Enter값을 그대로 읽어 바로 종료된 것이다.
그래서 '첫번째 문자열 입력 : '이 넘어가고 '두번째 정수 입력 : '이 출력된 것이다. 만약 정수를 입력하고 그 다음 문자를 입력하려고 할 때 next()메소드를 사용하여야 한다. 아니면 위에 nextLine메소드를 한번 더 써줘서 enter값을 없애줘야 한다. 다른 방법으로는 정수를 nextLine()으로 입력받고 Integer.parseInt()로 변환해서 사용하는 것이다..
#Scanner의 메소드
| 메소드 | 설명 |
| String next() | 다음 토큰을 문자열로 리턴 |
| byte nextByte() | 다음 토큰을 byte 타입으로 리턴 |
| short nextShort() | 다음 토큰을 short 타입으로 리턴 |
| int nextInt() | 다음 토큰을 int 타입으로 리턴 |
| long nextLong() | 다음 토큰을 long 타입으로 리턴 |
| float nextFloat() | 다음 토큰을 float타입으로 리턴 |
| double nextDouble() | 다음 토큰을 double타입으로 리턴 |
| String nextLine() | '\n(enter)'을 포함하는 한 라인을 읽고 '\n(enter)'을 버린 나머지만 리턴 |
| void close() | Scanner의 사용 종료 |
| boolean hasNext() | 현재 입력된 토큰이 있으면 true, 아니면 새로운 입력이 들어올 때까지 무한정 기다려서, 새로운 입력이 들어오면 그 때 true리턴, ctrl+z키가 입력되면 끝이므로 false 리턴 |
'Back-end > Java_T.I.L' 카테고리의 다른 글
| [TIL 220118] BufferedReader / BufferedWriter (0) | 2022.01.19 |
|---|---|
| [TIL 220111] 자바의정석 7. 객체지향 프로그래밍 II (3) (0) | 2022.01.12 |
| [TIL 220110] 자바의정석 7. 객체지향 프로그래밍 II (2) (0) | 2022.01.10 |
| [TIL 220109] 자바의정석 7. 객체지향 프로그래밍 II (1) (0) | 2022.01.10 |
| [TIL 220108] 자바의정석 6. 객체지향 프로그래밍 I (2) (0) | 2022.01.08 |
댓글