17370845950

Java里的Scanner类怎么用_JavaScanner输入读取流程解析
Java中Scanner类读取用户输入需创建对象并注意换行残留:用Scanner sc = new Scanner(System.in)创建,nextLine()读整行并消耗换行符,nextInt()等不消耗换行符,混合使用时须加sc.nextLine()清理,最后推荐调用sc.close()。

Java中Scanner类是读取用户输入最常用的方式,核心在于创建Scanner对象、调用对应方法读取数据、注意类型匹配与换行残留问题。

创建Scanner对象,关联输入源

通常从标准输入(键盘)读取,需传入System.in

  • Scanner sc = new Scanner(System.in); —— 最常见用法
  • 也可读取字符串、文件等:new Scanner("123 abc")new Scanner(new File("data.txt"))

按类型读取数据,方法名即语义

Scanner提供一系列nextXxx()方法,自动跳过空白符(空格、制表、换行),但要注意行为差异:

  • nextLine():读取整行(含空格),并消耗掉换行符
  • next()、nextInt()、nextDouble()等:只读取下一个“有效标记”(以空白分隔),不消耗后续换行符
  • 例如:先调用nextInt()再调用nextLine(),后者会直接返回空字符串——因为换行符还留在缓冲区

避免换行残留,典型修复写法

混合使用数值读取和字符串读取时,必须手动清理换行符:

  • nextInt()后加一句sc.nextLine();,专门吸收残留换行
  • 或者统一用nextLine()读取所有输入,再用Integer.parseInt()等转换
  • 示例:

// 安全写法
int age = sc.nextInt();
sc.nextLine(); // 吸收换行
String name = sc.nextLine();

关闭Scanner,释放资源(可选但推荐)

如果Scanner关联的是文件,必须调用sc.close();关联System.in时关闭与否影响不大,但养成习惯更稳妥:

  • sc.close(); —— 放在所有读取操作完成后
  • 注意:关闭后不可再调用任何nextXxx()方法,否则抛IllegalStateException