Scanner — 정규 표현식 기반 텍스트 스캐너

Scanner — 정규 표현식 기반 텍스트 스캐너

Scanner정규 표현식을 사용해 기본형 타입과 문자열을 파싱할 수 있는 간단한 텍스트 스캐너예요. Scanner는 기본적으로 공백과 일치하는 구분자 패턴으로 입력을 토큰으로 나눠요. 그 결과 토큰은 다양한 next 메서드를 사용해 다른 타입의 값으로 변환될 수 있어요.

출처: Java API Reference

본문

public final class Scanner extends Object implements Iterator<String>, Closeable

예를 들어 아래 코드는 사용자가 콘솔에서 숫자를 읽게 해줘요.

var con = System.console();
if (con != null) {
    Scanner sc = new Scanner(con.reader());
    int i = sc.nextInt();
}

useDelimiter/useLocale/useRadix로 구분자, 로케일, 진법을 바꿀 수 있고, reset()으로 기본 상태로 되돌릴 수 있어요. 구분자 패턴(기본 \p{javaWhitespace}+), 로케일(기본 FORMAT 로케일), 진법(기본 10)이 기본 토큰 매칭에 영향을 줘요.

생성자

Scanner(Readable) 외에 Scanner(InputStream), Scanner(File), Scanner(Path), Scanner(String), Scanner(ReadableByteChannel) 소스를 받는 오버로드가 있어요. 바이트 소스는 기본 또는 지정된 Charset으로 문자로 변환돼요. 파일 생성자는 FileNotFoundException/IOException을 던질 수 있어요.

상태와 설정

  • close() — 스캐너를 닫아요. 닫은 후 검색 연산은 IllegalStateException을 일으켜요.
  • ioException() — 기본 Readable이 마지막으로 던진 IOException을 반환해요.
  • delimiter() / useDelimiter(Pattern|String) — 구분자 패턴을 조회/설정해요.
  • locale() / useLocale(Locale) — 로케일을 조회/설정해요.
  • radix() / useRadix(int) — 기본 진법을 조회/설정해요(범위 밖이면 IllegalArgumentException).
  • match() — 마지막 스캔 연산의 MatchResult를 반환해요.
  • reset()useDelimiter/useLocale/useRadix가 바꾼 상태를 기본값으로 되돌려요.
  • toString() — 디버깅용 문자열을 반환해요.

토큰 스캔

  • hasNext() / next() — 다음 토큰의 존재 여부/다음 토큰을 반환해요.
  • hasNext(Pattern|String) / next(Pattern|String) — 지정 패턴과 일치하는 다음 토큰을 확인/반환해요.
  • hasNextLine() / nextLine() — 다음 줄의 존재/현재 줄을 반환해요.
  • remove() — 이 Iterator 구현은 remove 연산을 지원하지 않아요.

패턴 검색

  • findInLine(Pattern|String) — 구분자 무시하고 다음 줄 종결자 전에 패턴을 찾아요.
  • findWithinHorizon(Pattern|String, int horizon) — 지정 horizon 코드포인트 내에서 패턴을 찾아요.
  • skip(Pattern|String) — 지정 패턴과 일치하는 입력을 건너뛰어요. 현재 위치에서 일치가 없으면 NoSuchElementException을 던져요.

기본형 스캔

hasNextBoolean/nextBoolean, hasNextByte/nextByte, hasNextShort/nextShort, hasNextInt/nextInt, hasNextLong/nextLong, hasNextFloat/nextFloat, hasNextDouble/nextDouble, hasNextBigInteger/nextBigInteger, hasNextBigDecimal/nextBigDecimal — 각 기본형/큰 숫자 타입의 토큰을 확인하고 스캔해요. 정수 계열은 radix를 지정할 수 있고, 잘못된 토큰이면 InputMismatchException을 던져요.

스트림

  • tokens() — 구분자로 분리된 토큰의 스트림을 반환해요(fail-fast).
  • findAll(Pattern|String) — 지정 패턴과 일치하는 결과의 스트림을 반환해요.

더 알아보기 (Learn more)