Java : Scanner (字句解析) - API使用例

Scanner (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

正規表現を使用してプリミティブ型および文字列の構文解析が可能な、単純なテキスト・スキャナです。

クラス構成

Scannerクラスでは、入力を正規表現で構文解析して、数値や文字列として取得できます。
複雑な構文には向いていませんが、単純な構文では便利です。

標準入力である System.in を使う例です。

final var sc = new Scanner(System.in);

while (sc.hasNext()) {

    final var next = sc.next();

    if ("quit".equals(next)) {
        System.out.println("Quit!");
        break;
    }

    System.out.println("next : " + next);
}
// コンソール
------------
入力
 ↓
abcd <Enter>

出力
 ↓
next : abcd

------------
入力
 ↓
123 XYZ <Enter>

出力
 ↓
next : 123
next : XYZ

------------
入力
 ↓
quit <Enter>

出力
 ↓
Quit!

補足

通常、Scanner は使い終わったら close する必要があります。
しかし、入力に System.in を使うときは close するべきでしょうか?

上記のページにも議論がありますが、基本的に System.in のときは close しなくてもよいでしょう。
なぜなら、System.in の所有者は Scanner ではなく System だからです。

System から一時的に借りた InputStream なので、勝手に閉じるのはよくないということですね。


コンストラクタ

Scanner (File source)

指定されたファイルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        abcd
        123
        """;
final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input);

try (final var sc = new Scanner(source.toFile())) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (File source, String charsetName)

指定されたファイルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        ○△×
        123
        """;
final var charsetName = "Shift_JIS";

final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input, Charset.forName(charsetName));

try (final var sc = new Scanner(source.toFile(), charsetName)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // ○△×

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (File source, Charset charset)

指定されたファイルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        ○△×
        123
        """;
final var charset = Charset.forName("Shift_JIS");

final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input, charset);

try (final var sc = new Scanner(source.toFile(), charset)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // ○△×

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (InputStream source)

指定された入力ストリームからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        abcd
        123
        """;
final var source = new ByteArrayInputStream(input.getBytes());

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (InputStream source, String charsetName)

指定された入力ストリームからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        ○△×
        123
        """;
final var charsetName = "Shift_JIS";
final var source = new ByteArrayInputStream(input.getBytes(charsetName));

try (final var sc = new Scanner(source, charsetName)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // ○△×

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (InputStream source, Charset charset)

指定された入力ストリームからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        ○△×
        123
        """;
final var charset = Charset.forName("Shift_JIS");
final var source = new ByteArrayInputStream(input.getBytes(charset));

try (final var sc = new Scanner(source, charset)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // ○△×

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (Readable source)

指定されたソースからスキャンされた値を生成するScannerを新しく構築します。

final var input = """
        abcd
        123
        """;
final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input);

try (final var sc = new Scanner(Files.newBufferedReader(source))) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (String source)

指定された文字列からスキャンされた値を生成するScannerを新しく構築します。

final var source = """
        abcd
        123
        """;
try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (ReadableByteChannel source)

指定されたチャネルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        abcd
        123
        """;
final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input);

try (final var sc = new Scanner(
        Files.newByteChannel(source, StandardOpenOption.READ))) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (ReadableByteChannel source, String charsetName)

指定されたチャネルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        ○△×
        123
        """;
final var charsetName = "Shift_JIS";
final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input, Charset.forName(charsetName));

try (final var sc = new Scanner(
        Files.newByteChannel(source, StandardOpenOption.READ), charsetName)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // ○△×

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (ReadableByteChannel source, Charset charset)

指定されたチャネルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        ○△×
        123
        """;
final var charset = Charset.forName("Shift_JIS");
final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input, charset);

try (final var sc = new Scanner(
        Files.newByteChannel(source, StandardOpenOption.READ), charset)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // ○△×

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (Path source)

指定されたファイルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        abcd
        123
        """;
final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input);

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (Path source, String charsetName)

指定されたファイルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        ○△×
        123
        """;
final var charsetName = "Shift_JIS";

final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input, Charset.forName(charsetName));

try (final var sc = new Scanner(source, charsetName)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // ○△×

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner (Path source, Charset charset)

指定されたファイルからスキャンされた値を生成する新しいScannerを構築します。

final var input = """
        ○△×
        123
        """;
final var charset = Charset.forName("Shift_JIS");

final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input, charset);

try (final var sc = new Scanner(source, charset)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // ○△×

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

メソッド

void close ()

現在のスキャナをクローズします。

final var input = """
        abcd
        123
        """;
final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input);

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}
// try-with-resources文を使わない例です。
final var input = """
        abcd
        123
        """;
final var source = Path.of("R:", "java-work", "aaa.txt");
System.out.println(source); // R:\java-work\aaa.txt

Files.writeString(source, input);

final var sc = new Scanner(source);
try {
    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123

} finally {
    sc.close();
}

Pattern delimiter ()

このScannerが区切り文字のマッチングに現在使用しているPatternを返します。

final var source = """
        abcd XYZ
        123
        """;

try (final var sc = new Scanner(source)) {

    final var delimiter = sc.delimiter();
    System.out.println(delimiter); // \p{javaWhitespace}+

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // XYZ

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}
final var source = "abcd=XYZ=123";

try (final var sc = new Scanner(source)) {

    sc.useDelimiter("=");

    final var delimiter = sc.delimiter();
    System.out.println(delimiter); // =

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // XYZ

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Stream<MatchResult> findAll (String patString)

提供されたパターン文字列と一致する一致結果のストリームを返します。

このメソッドは findAll(Pattern.compile(patString)) と同等です。
API使用例はそちらをご参照ください。

Stream<MatchResult> findAll (Pattern pattern)

このスキャナからの一致結果のストリームを返します。

final var source = "abcd 123 XYZ 456";

final var pattern = Pattern.compile("[a-zA-Z]+");
try (final var stream = new Scanner(source).findAll(pattern)) {

    final var ret = stream.map(MatchResult::group).toList();
    System.out.println(ret); // [abcd, XYZ]
}
final var source = "abcd 123 XYZ 456";

final var pattern = Pattern.compile("\\d+");
try (final var stream = new Scanner(source).findAll(pattern)) {

    final var ret = stream.map(MatchResult::group).toList();
    System.out.println(ret); // [123, 456]
}

String findInLine (String pattern)

区切り文字を無視して、次に現れる、指定された文字列から構築されたパターンの検索を試みます。

このメソッドは findInLine(Pattern.compile(pattern)) と同等です。
API使用例はそちらをご参照ください。

String findInLine (Pattern pattern)

区切り文字を無視して、次に現れる指定されたパターンの検索を試みます。

final var source = """
        abcdefg
        123
        """;

try (final var sc = new Scanner(source)) {

    final var ret = sc.findInLine(Pattern.compile("cde"));
    System.out.println(ret); // cde

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // fg

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}
final var source = """
        abcd
        123
        """;

try (final var sc = new Scanner(source)) {

    final var ret = sc.findInLine(Pattern.compile("XYZ"));
    System.out.println(ret); // null

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

String findWithinHorizon (String pattern, int horizon)

区切り文字を無視して、次に現れる、指定された文字列から構築されたパターンの検索を試みます。

このメソッドは findWithinHorizon(Pattern.compile(pattern), horizon) と同等です。
API使用例はそちらをご参照ください。

String findWithinHorizon (Pattern pattern, int horizon)

次に現れる指定されたパターンの検索を試みます。

final var source = """
        abcd
        XYZ
        """;

try (final var sc = new Scanner(source)) {

    final var ret = sc.findWithinHorizon(Pattern.compile("bc"), 2);
    System.out.println(ret); // null

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // XYZ
}

try (final var sc = new Scanner(source)) {

    final var ret = sc.findWithinHorizon(Pattern.compile("bc"), 3);
    System.out.println(ret); // bc

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // d

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // XYZ
}

boolean hasNext ()

このスキャナが入力内に別のトークンを保持する場合はtrueを返します。

final var source = """
        abcd efg
        XYZ
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // efg

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // XYZ

    System.out.println(sc.hasNext()); // false

    try {
        final var next = sc.next();
    } catch (NoSuchElementException e) {
        System.out.println("NoSuchElementException!");
    }

    // 結果
    // ↓
    //NoSuchElementException!
}

boolean hasNext (String pattern)

次のトークンが、指定された文字列から構築されたパターンに一致する場合はtrueを返します。

このメソッドは hasNext(Pattern.compile(pattern)) と同等です。
API使用例はそちらをご参照ください。

boolean hasNext (Pattern pattern)

次の完全なトークンが指定されたパターンに一致する場合はtrueを返します。

final var source = "abcd XYZ";

try (final var sc = new Scanner(source)) {

    final var lower = Pattern.compile("[a-z]+");
    final var upper = Pattern.compile("[A-Z]+");

    System.out.println(sc.hasNext(lower)); // true
    System.out.println(sc.next(lower)); // abcd

    System.out.println(sc.hasNext(lower)); // false

    System.out.println(sc.hasNext(upper)); // true
    System.out.println(sc.next(upper)); // XYZ

    System.out.println(sc.hasNext(upper)); // false
}

boolean hasNextBigDecimal ()

このスキャナの入力内の次のトークンが、nextBigDecimal()メソッドを使ってBigDecimalとして解釈可能な場合にtrueを返します。

final var source = """
        0.12345678901234567890123456789
        -9999.0
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextBigDecimal()); // true
    System.out.println(sc.nextBigDecimal()); // 0.12345678901234567890123456789

    System.out.println(sc.hasNextBigDecimal()); // true
    System.out.println(sc.nextBigDecimal()); // -9999.0

    System.out.println(sc.hasNextBigDecimal()); // false
}

boolean hasNextBigInteger ()

このスキャナの入力内の次のトークンが、nextBigInteger()メソッドを使ってデフォルト基数のBigIntegerとして解釈可能な場合にtrueを返します。

final var source = """
        123456789012345678901234567890
        -9999
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextBigInteger()); // true
    System.out.println(sc.nextBigInteger()); // 123456789012345678901234567890

    System.out.println(sc.hasNextBigInteger()); // true
    System.out.println(sc.nextBigInteger()); // -9999

    System.out.println(sc.hasNextBigInteger()); // false
}

boolean hasNextBigInteger (int radix)

このスキャナの入力内の次のトークンが、nextBigInteger()メソッドを使って、指定された基数のBigIntegerとして解釈可能な場合にtrueを返します。

関連:hasNextBigInteger()

final var source = """
        1234
        ff
        1000
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextBigInteger()); // true
    System.out.println(sc.nextBigInteger()); // 1234

    System.out.println(sc.hasNextBigInteger(16)); // true
    System.out.println(sc.nextBigInteger(16)); // 255

    System.out.println(sc.hasNextBigInteger(2)); // true
    System.out.println(sc.nextBigInteger(2)); // 8
}

boolean hasNextBoolean ()

文字列「true|false」から作成された大文字と小文字の区別されないパターンを使用して、スキャナの入力内の次のトークンをboolean値として解釈可能であれば、trueを返します。

final var source = """
        true
        false
        TRUE
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextBoolean()); // true
    System.out.println(sc.nextBoolean()); // true

    System.out.println(sc.hasNextBoolean()); // true
    System.out.println(sc.nextBoolean()); // false

    System.out.println(sc.hasNextBoolean()); // true
    System.out.println(sc.nextBoolean()); // true

    System.out.println(sc.hasNextBoolean()); // false
}

boolean hasNextByte ()

このスキャナの入力内の次のトークンが、nextByte()メソッドを使ってデフォルト基数のbyte値として解釈可能な場合にtrueを返します。

型が違う以外は hasNextInt() と同等です。
API使用例はそちらをご参照ください。

boolean hasNextByte (int radix)

このスキャナの入力内の次のトークンが、nextByte()メソッドを使って、指定された基数のbyte値として解釈可能な場合にtrueを返します。

型が違う以外は hasNextInt(int radix) と同等です。
API使用例はそちらをご参照ください。

boolean hasNextDouble ()

このスキャナの入力内の次のトークンが、nextDouble()メソッドを使ってdouble値として解釈可能な場合にtrueを返します。

final var source = """
        1.234
        9.99E-3
        -Infinity
        XYZ
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // 1.234

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // 0.00999

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // -Infinity

    System.out.println(sc.hasNextDouble()); // false

    try {
        final var next = sc.nextDouble();
    } catch (NoSuchElementException e) {
        System.out.println("NoSuchElementException!");
    }

    // 結果
    // ↓
    //NoSuchElementException!
}
System.out.println(Double.MAX_VALUE); // 1.7976931348623157E308

final var source = """
        1.0E308
        1.0E309
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // 1.0E308

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // Infinity
}

boolean hasNextFloat ()

このスキャナの入力内の次のトークンが、nextFloat()メソッドを使ってfloat値として解釈可能な場合にtrueを返します。

型が違う以外は hasNextDouble() と同等です。
API使用例はそちらをご参照ください。

boolean hasNextInt ()

このスキャナの入力内の次のトークンが、nextInt()メソッドを使ってデフォルト基数のint値として解釈可能な場合にtrueを返します。

final var source = """
        1234
        -999
        XYZ
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 1234

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // -999

    System.out.println(sc.hasNextInt()); // false

    try {
        final var next = sc.nextInt();
    } catch (NoSuchElementException e) {
        System.out.println("NoSuchElementException!");
    }

    // 結果
    // ↓
    //NoSuchElementException!
}
System.out.println(Integer.MAX_VALUE); // 2147483647

final var source = """
        2147483646
        2147483647
        2147483648
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 2147483646

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 2147483647

    System.out.println(sc.hasNextInt()); // false
}

boolean hasNextInt (int radix)

このスキャナの入力内の次のトークンが、nextInt()メソッドを使って、指定された基数のint値として解釈可能な場合にtrueを返します。

関連:hasNextInt()

final var source = """
        1234
        ff
        1000
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 1234

    System.out.println(sc.hasNextInt(16)); // true
    System.out.println(sc.nextInt(16)); // 255

    System.out.println(sc.hasNextInt(2)); // true
    System.out.println(sc.nextInt(2)); // 8
}

boolean hasNextLine ()

このスキャナの入力に別の行がある場合はtrueを返します。

final var source = """
        abcd efg
        XYZ
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextLine()); // true
    System.out.println(sc.nextLine()); // abcd efg

    System.out.println(sc.hasNextLine()); // true
    System.out.println(sc.nextLine()); // XYZ

    System.out.println(sc.hasNextLine()); // false

    try {
        final var next = sc.nextLine();
    } catch (NoSuchElementException e) {
        System.out.println("NoSuchElementException!");
    }

    // 結果
    // ↓
    //NoSuchElementException!
}

boolean hasNextLong ()

このスキャナの入力内の次のトークンが、nextLong()メソッドを使ってデフォルト基数のlong値として解釈可能な場合にtrueを返します。

型が違う以外は hasNextInt() と同等です。
API使用例はそちらをご参照ください。

boolean hasNextLong (int radix)

このスキャナの入力内の次のトークンが、nextLong()メソッドを使って、指定された基数のlong値として解釈可能な場合にtrueを返します。

型が違う以外は hasNextInt(int radix) と同等です。
API使用例はそちらをご参照ください。

boolean hasNextShort ()

このスキャナの入力内の次のトークンが、nextShort()メソッドを使ってデフォルト基数のshort値として解釈可能な場合にtrueを返します。

型が違う以外は hasNextInt() と同等です。
API使用例はそちらをご参照ください。

boolean hasNextShort (int radix)

このスキャナの入力内の次のトークンが、nextShort()メソッドを使って、指定された基数のshort値として解釈可能な場合にtrueを返します。

型が違う以外は hasNextInt(int radix) と同等です。
API使用例はそちらをご参照ください。

IOException ioException ()

このScannerの基となるReadableによって最後にスローされたIOExceptionを返します。

try (final var sc = new Scanner("abcd")) {

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    final var ret = sc.ioException();
    System.out.println(ret); // null
}
final var source = new StringReader("abcd");
try (final var sc = new Scanner(source)) {

    // エラーを起こすために、意図的にcloseします。
    source.close();
    System.out.println(sc.hasNext()); // false

    final var ret = sc.ioException();
    System.out.println(ret); // java.io.IOException: Stream closed
}

Locale locale ()

現在のスキャナのロケールを返します。

System.out.println(Locale.getDefault(Locale.Category.FORMAT)); // ja_JP

try (final var sc = new Scanner("abcd")) {

    System.out.println(sc.locale()); // ja_JP

    sc.useLocale(Locale.US);
    System.out.println(sc.locale()); // en_US
}

MatchResult match ()

このスキャナが実行した最後のスキャン操作のマッチング結果を返します。

try (final var sc = new Scanner("abcdefg")) {

    System.out.println(sc.findInLine(Pattern.compile("cde"))); // cde

    final var ret = sc.match();
    System.out.println(ret.group()); // cde
    System.out.println(ret.start()); // 2
    System.out.println(ret.end()); // 5
}

String next ()

このスキャナから次の完全なトークンを検索して返します。

このメソッドの使用例は、hasNext() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String next (String pattern)

次のトークンが指定された文字列から構築されたパターンに一致する場合にのみ、それを返します。

このメソッドは next(Pattern.compile(pattern)) と同等です。
API使用例はそちらをご参照ください。

String next (Pattern pattern)

指定されたパターンに一致する次のトークンを返します。

final var source = "abcd XYZ";

try (final var sc = new Scanner(source)) {

    final var lower = Pattern.compile("[a-z]+");
    final var upper = Pattern.compile("[A-Z]+");

    System.out.println(sc.hasNext(lower)); // true
    System.out.println(sc.next(lower)); // abcd

    System.out.println(sc.hasNext(lower)); // false

    System.out.println(sc.hasNext(upper)); // true
    System.out.println(sc.next(upper)); // XYZ

    System.out.println(sc.hasNext(upper)); // false
}

BigDecimal nextBigDecimal ()

入力の次のトークンをBigDecimalとしてスキャンします。

このメソッドの使用例は、hasNextBigDecimal() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

BigInteger nextBigInteger ()

入力の次のトークンをBigIntegerとしてスキャンします。

このメソッドの使用例は、hasNextBigInteger() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

BigInteger nextBigInteger (int radix)

入力の次のトークンをBigIntegerとしてスキャンします。

このメソッドの使用例は、hasNextBigInteger(int radix) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

boolean nextBoolean ()

入力の次のトークンをboolean値としてスキャンして、その値を返します。

このメソッドの使用例は、hasNextBoolean() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

byte nextByte ()

入力の次のトークンをbyteとしてスキャンします。

型が違う以外は nextInt() と同等です。
API使用例はそちらをご参照ください。

byte nextByte (int radix)

入力の次のトークンをbyteとしてスキャンします。

型が違う以外は nextInt(int radix) と同等です。
API使用例はそちらをご参照ください。

double nextDouble ()

入力の次のトークンをdoubleとしてスキャンします。

final var source = """
        1.234
        9.99E-3
        -Infinity
        XYZ
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // 1.234

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // 0.00999

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // -Infinity

    System.out.println(sc.hasNextDouble()); // false

    try {
        final var next = sc.nextDouble();
    } catch (NoSuchElementException e) {
        System.out.println("NoSuchElementException!");
    }

    // 結果
    // ↓
    //NoSuchElementException!
}
System.out.println(Double.MAX_VALUE); // 1.7976931348623157E308

final var source = """
        1.0E308
        1.0E309
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // 1.0E308

    System.out.println(sc.hasNextDouble()); // true
    System.out.println(sc.nextDouble()); // Infinity
}

float nextFloat ()

入力の次のトークンをfloatとしてスキャンします。

型が違う以外は nextDouble() と同等です。
API使用例はそちらをご参照ください。

int nextInt ()

入力の次のトークンをintとしてスキャンします。

final var source = """
        1234
        -999
        XYZ
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 1234

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // -999

    System.out.println(sc.hasNextInt()); // false

    try {
        final var next = sc.nextInt();
    } catch (NoSuchElementException e) {
        System.out.println("NoSuchElementException!");
    }

    // 結果
    // ↓
    //NoSuchElementException!
}
System.out.println(Integer.MAX_VALUE); // 2147483647

final var source = """
        2147483646
        2147483647
        2147483648
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 2147483646

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 2147483647

    System.out.println(sc.hasNextInt()); // false
}

int nextInt (int radix)

入力の次のトークンをintとしてスキャンします。

関連:nextInt()

final var source = """
        1234
        ff
        1000
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 1234

    System.out.println(sc.hasNextInt(16)); // true
    System.out.println(sc.nextInt(16)); // 255

    System.out.println(sc.hasNextInt(2)); // true
    System.out.println(sc.nextInt(2)); // 8
}

String nextLine ()

スキャナを現在行の先に進めて、スキップした入力を返します。

このメソッドの使用例は、hasNextLine() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

long nextLong ()

入力の次のトークンをlongとしてスキャンします。

型が違う以外は nextInt() と同等です。
API使用例はそちらをご参照ください。

long nextLong (int radix)

入力の次のトークンをlongとしてスキャンします。

型が違う以外は nextInt(int radix) と同等です。
API使用例はそちらをご参照ください。

short nextShort ()

入力の次のトークンをshortとしてスキャンします。

型が違う以外は nextInt() と同等です。
API使用例はそちらをご参照ください。

short nextShort (int radix)

入力の次のトークンをshortとしてスキャンします。

型が違う以外は nextInt(int radix) と同等です。
API使用例はそちらをご参照ください。

int radix ()

現在のスキャナのデフォルト基数を返します。

final var source = """
        1234
        ff
        """;

try (final var sc = new Scanner(source)) {

    System.out.println(sc.radix()); // 10

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 1234

    System.out.println(sc.hasNextInt()); // false

    sc.useRadix(16);
    System.out.println(sc.radix()); // 16

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 255
}

void remove ()

removeオペレーションは、このIteratorの実装によってサポートされていません。

try (final var sc = new Scanner("abcd")) {

    try {
        sc.remove();
    } catch (UnsupportedOperationException e) {
        System.out.println("UnsupportedOperationException!");
    }

    // 結果
    // ↓
    //UnsupportedOperationException!
}

Scanner reset ()

現在のスキャナをリセットします。

try (final var sc = new Scanner("abcd")) {

    System.out.println(sc.delimiter()); // \p{javaWhitespace}+
    System.out.println(sc.locale()); // ja_JP
    System.out.println(sc.radix()); // 10

    sc.useDelimiter("=").useLocale(Locale.US).useRadix(16);

    System.out.println(sc.delimiter()); // =
    System.out.println(sc.locale()); // en_US
    System.out.println(sc.radix()); // 16

    sc.reset();

    System.out.println(sc.delimiter()); // \p{javaWhitespace}+
    System.out.println(sc.locale()); // ja_JP
    System.out.println(sc.radix()); // 10
}

Scanner skip (String pattern)

指定された文字列で構築されたパターンに一致する入力をスキップします。

このメソッドは skip(Pattern.compile(pattern)) と同等です。
API使用例はそちらをご参照ください。

Scanner skip (Pattern pattern)

指定されたパターンに一致する入力を、区切り文字を無視してスキップします。

final var source = "abcd 123 XYZ 456";

final var pattern = Pattern.compile("\\p{javaWhitespace}*\\p{Alpha}+");
try (final var sc = new Scanner(source)) {

    System.out.println(sc.hasNextInt()); // false

    sc.skip(pattern);

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123

    System.out.println(sc.hasNextInt()); // false

    sc.skip(pattern);

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.next()); // 456
}

Stream<String> tokens ()

このスキャナから区切り記号で区切られたトークンのストリームを返します。

final var source = """
        abcd XYZ
        123
        """;

try (final var stream = new Scanner(source).tokens()) {

    System.out.println(stream.toList()); // [abcd, XYZ, 123]
}

String toString ()

このScannerの文字列表現を返します。

try (final var sc = new Scanner("abcd")) {

    final var str = sc.toString();
    System.out.println(str);
}

// 結果
// ↓
//java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false]
// [need input=false][source closed=false][skipped=false][group separator=\x{2c}]
// [decimal separator=\x{2e}][positive prefix=][negative prefix=\Q-\E]
// [positive suffix=][negative suffix=][NaN string=\QNaN\E][infinity string=\Q∞\E]

Scanner useDelimiter (String pattern)

このスキャナの区切り文字パターンを、指定されたStringから作成されたパターンに設定します。

このメソッドの使用例は、delimiter() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Scanner useDelimiter (Pattern pattern)

このスキャナの区切り文字パターンを、指定されたパターンに設定します。

final var source = "abcd=XYZ=123";

try (final var sc = new Scanner(source)) {

    sc.useDelimiter(Pattern.compile("="));

    final var delimiter = sc.delimiter();
    System.out.println(delimiter); // =

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // abcd

    System.out.println(sc.hasNext()); // true
    System.out.println(sc.next()); // XYZ

    System.out.println(sc.hasNextInt()); // true
    System.out.println(sc.nextInt()); // 123
}

Scanner useLocale (Locale locale)

スキャナのロケールを指定されたロケールに設定します。

このメソッドの使用例は、locale() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Scanner useRadix (int radix)

スキャナのデフォルト基数を指定された基数に設定します。

このメソッドの使用例は、radix() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Iteratorで宣言されたメソッド

forEachRemaining

Java API 使用例 : Iterator」をご参照ください。


関連記事

ページの先頭へ