[Scanner Class]
자바에서 사용자 입력을 받는 가장 기본적인 클래스이다.
입력 메서드 대부분은 공백과 개행 (' ', '\n', '\t', '\r') 을 기준으로 읽어 들인다.
Scanner 클래스는 입력 값을 대부분 토큰 단위로 읽고(nextLine()은 Enter 단위), 이 토큰을 반환하는 데이터 형태에 따라 몇가지 메서드가 Scanner 클래스에 존재한다.
토큰단위란
Scanner 클래스에서 **토큰(token)**이란 입력된 문자열에서 의미 있는 최소 단위로 나뉜 단어 조각을 말한다. Scanner는 공백이나 특정 구분자를 기준으로 문자열을 잘라서 각 조각을 토큰으로 취급한다. 예를 들어, Scanner로 "Hello World 123"라는 문자열을 입력받으면, Hello, World, 123이 각각의 토큰되며 공백과 개행은 포함되지 않는다.
[Scanner 매서드]
next() | String 으로 읽고 띄어쓰기 뒷 부분은 읽지 않음 |
hasNext() | 입력 된 토큰이 있으면 true, 아니라면 무한 대기 상태가 된다. 그 후 입력이 들어오면 true, ctrl + z 가 입력 되면 false 를 반환 |
close() | 생성한 Scanner객체 종료 |
[Scanner 사용]
import java.util.Scanner; // 유틸에 있는 자바 스캐너 클래스 임포트
class Main {
public static void main(String[] args) {
Scanner myObj = new Scanner(System.in); // Scanner 객체 생성
System.out.println("Enter username");
String userName = myObj.nextLine(); // 입력값을 읽어서 변수에 저장
System.out.println("Username is: " + userName);
}
}
주의 할 점
컴퓨터는 입력을 받을 때 입력 한 공백과 개행 (' ', '\n', '\t', '\r') 의 문자도 함께 버퍼에 저장 된다. 그래서 다음 문자를 읽기 전까지 공백과 개행들은 버퍼에 남아 있다.
이 점으로 인해 많은 예외들을 만나게 될 수도 있다.
아래는 그 중 하나의 예외에 걸린 나의 모습을 볼 수 있다.
간략하게 정리하자면, next() 는 띄어쓰기 전까지의 토큰을 가져오고 nextLine()은 \n (엔터) 까지 모든 라인을 가져온다.
만약에 next로 입력한 '블로그 ' 를 받아 왔다면 [블로그] 가 저장 될 것이고 버퍼에는 ' ' 공백만 남게 된다. 그 다음 바로 nextLine() 을 입력했다면 버퍼에 저장 된 ' ' 만 읽어 오기 때문에 원하는 값을 받아오지 못 할 수도 있다.
'JAVA' 카테고리의 다른 글
Scanner를 그만 쓰고 BufferReader/BufferedWriter를 사용하자 (0) | 2024.11.14 |
---|---|
Java 에서 큰따옴표(" ")와 작은따옴표(' ') 의 차이 (1) | 2024.11.10 |
[Java] nextLine() 오류 (0) | 2024.10.31 |
[Java] 문자열을 반복하는 메서드 - repeat() (0) | 2024.10.24 |
CompletableFuture 에서 명시적인 값을 지정하기 (0) | 2024.07.17 |