20230418 java.util.Scanner

简介

  • public final class Scanner implements Iterator<String>, Closeable
  • 一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种 next 方法将生成的标记转换为不同类型的值。
  • Scanner 使用的默认空白定界符由 Character.isWhitespace() 识别。 reset() 方法会将 Scanner 的定界符的值重置为默认的空白定界符
    • 默认空白定界符包括空格、回车、制表符等
  • next 和 hasNext 方法及其伴随方法(例如 nextInt 和 hasNextInt)首先跳过与定界符模式匹配的任何输入,然后尝试返回下一个标记。
  • hasNext() 和 next() 方法都可能阻止等待进一步的输入。 hasNext() 方法是否阻塞与其关联的 next() 方法是否阻塞无关。 tokens 方法也可能会阻塞等待输入。
  • findInLine()、findWithinHorizon()、skip() 和 findAll() 方法独立于定界符模式运行。这些方法将尝试匹配指定的模式而不考虑输入中的分隔符,因此可以在分隔符不相关的特殊情况下使用。这些方法可能会阻塞等待更多输入。
  • 当 Scanner 抛出 InputMismatchException 时,Scanner 将不会传递导致异常的令牌,以便可以通过其他方法检索或跳过它。
  • 根据定界模式的类型,可能会返回空标记。例如,模式“\s+”将不会返回空标记,因为它匹配分隔符的多个实例。定界模式“\s”可能会返回空标记,因为它一次只传递一个空格。
  • Scanner 可以从任何实现 Readable 接口的对象中读取文本。如果对底层可读对象的 read() 方法的调用抛出 IOException,则 Scanner 假定已到达输入的末尾。底层可读对象最近抛出的 IOException 可以通过 ioException 方法获取。
  • 当 Scanner 关闭时,如果源实现了 Closeable 接口,它将关闭其输入源。
  • 线程不安全
  • 默认将数字解释为十进制,useRadix 方法设置不同的基数
  • 能够扫描标准格式以及区域设置格式的数字。初始语言环境是 Locale.getDefault(Locale.Category.FORMAT) 方法返回的值;它可以通过 useLocale() 方法更改。
  • 本地化格式根据以下参数定义,对于特定区域设置,这些参数取自该区域设置的 DecimalFormat 对象 df 及其 DecimalFormatSymbols 对象 dfs。

构造方法

File, InputStream, Path, ReadableByteChannel

  • Scanner(File source)
  • Scanner(File source, Charset charset)
  • Scanner(File source, String charsetName)

Readable, String

  • Scanner(Readable source)

public 方法

扫描器信息:

  • delimiter, useDelimiter
    • 返回定界符
  • radix, useRadix
    • 返回基数
  • locale, useLocale
    • 返回语言环境

hasNext 和 next 系列方法:

  • hasNext, hasNextLine

  • hasNextBigDecimal, hasNextBigInteger

  • hasNextBoolean, hasNextByte, hasNextDouble, hasNextFloat, hasNextInt, hasNextLong, hasNextShort

  • next, nextLine

  • nextBigDecimal, nextBigInteger

  • nextBoolean, nextByte, nextDouble, nextFloat, nextInt, nextLong, nextShort

  • close

  • ioException

    • 返回此 Scanner 的底层 Readable 最后抛出的 IOException。如果不存在此类异常,则此方法返回 null。
  • findAll

  • findInLine

    • 按行扫描,如果匹配不到返回null,并且Scanner位置不变
  • findWithinHorizon

    • 入参 horizon 表示扫描范围长度
  • match

    • 返回本扫描仪最后一次扫描操作的匹配结果。如果未执行任何匹配,或者如果最后一次匹配不成功,则此方法抛出 IllegalStateException。 Scanner 的各种 next 方法在完成且未抛出异常的情况下使匹配结果可用。例如,在调用返回 int 的 nextInt 方法后,此方法返回 MatchResult 以搜索上面定义的 Integer 正则表达式。类似地,findInLine()、findWithinHorizon() 和 skip() 方法在成功时将进行匹配。
  • reset

    • 重置扫描仪会丢弃其所有可能已通过调用 useDelimiter() 、 useLocale() 或 useRadix() 更改的显式状态信息。
  • skip

    • 跳过与指定模式匹配的输入,忽略定界符。如果指定模式的锚定匹配成功,此方法将跳过输入。如果在当前位置未找到指定模式的匹配项,则不会跳过任何输入并抛出 NoSuchElementException
  • tokens

    • 从此扫描器返回以定界符分隔的令牌流。该流包含将返回的相同标记,从该扫描器的当前状态开始,通过重复调用 next 方法直到 hasNext 方法返回 false。生成的流是顺序的和有序的。所有流元素都是非空的。
  • toString

    • 返回 Scanner 信息

测试用例

// 按行输出文件内容
Scanner sc = new Scanner(Path.of("D:\\Develop\\workspace\\study\\study-design-pattern\\src\\main\\java"
        + "\\study\\hwj\\test\\ScannerTest.java"));
while (sc.hasNextLine()) {
    System.out.println(sc.nextLine());
}
posted @ 2023-06-22 14:39  流星<。)#)))≦  阅读(63)  评论(0编辑  收藏  举报