You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Scanner类的reset()方法有何作用?附示例代码

关于Scanner.reset()的作用及你的代码分析

1. Scanner.reset()的实际作用

Scanner.reset()方法的核心是将Scanner的所有配置恢复到创建时的默认状态,具体包括:

  • 重置分隔符为默认的空白字符(空格、换行、制表符等)
  • 恢复locale为系统默认的区域设置
  • 重置大小写敏感、数值基数等所有自定义设置
  • 清空Scanner内部未处理的输入缓存

简单说,就是把Scanner“打回原形”,回到你刚new Scanner(System.in)时的初始状态。

2. 为什么移除reset()后你的程序仍能正常运行

你的代码从始至终没有修改过Scanner的任何默认配置:

  • 一直用默认的空白分隔符读取整数
  • 没有调整locale、分隔符或其他Scanner参数
  • 每次nextInt()都正常消费输入,没有残留未处理的缓存

这种情况下调用reset()相当于“做了个无用功”——当前状态已经是默认状态,重置后没有任何变化,所以删掉这条语句对程序逻辑完全没有影响。

3. 什么时候才需要用到reset()

举个实际场景:假设你之前修改了Scanner的分隔符,比如:

Scanner s = new Scanner(System.in);
s.useDelimiter(","); // 把分隔符改成逗号
// 用逗号分隔读取数据
s.reset(); // 这里需要重置回默认的空白分隔符,才能继续正常读取空格/换行分隔的输入

只有当你修改过Scanner的配置,需要恢复默认状态时,reset()才有实际意义。

对你代码的小建议

你的代码里的s.reset()完全可以删掉,不会影响功能。另外可以优化下变量命名(比如把t改成testCases,X改成number),让代码可读性更高。

内容的提问来源于stack exchange,提问作者Mohammed Taqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:25:22