Java中Scanner读取控制台输入需创建对象绑定System.in,调用nextXxx()方法;注意nextXXX()后换行符残留会导致nextLine()失效,应手动调用nextLine()清除或统一用nextLine()配合parseXXX()转换。

Java中用Scanner读取控制台输入,核心是创建Scanner对象绑定System.in,再调用对应nextXxx()方法获取不同类型的数据。注意输入缓冲区和换行符处理,否则容易跳过后续输入。
基础用法:创建Scanner并读取基本类型
Scanner类位于java.util包,使用前需导入。它把System.in(标准输入流)当作数据源,逐个提取标记(token),默认以空白字符(空格、制表符、换行)分隔。
- 用new Scanner(System.in)初始化
- nextLine()读取一整行(含空格),会消耗掉换行符
- nextInt()、nextDouble()等只读取匹配类型的值,但不读取后续换行符
- 如果先调nextXXX()再调nextLine(),nextLine()可能立刻返回空字符串——因为上一个方法留下的换行符被它直接读走了
解决nextXXX()后nextLine()失效的问题
这是初学者最常遇到的坑。例如输入一个整数再输入一行字符串,第二行读不到内容。
- 在nextXXX()之后,手动加一句scanner.nextLine()来“吃掉”残留换行符
- 或者统一用nextLine()读入,再用Integer.parseInt()、Double.parseDouble()等转换
- 示例:读年龄(int)和姓名(String)时,可写成:
int age = Integer.parseInt(scanner.nextLine().trim());
String name = scanner.nextLine().trim();
按指定分隔符或模式读取
Scanner支持自定义分隔符,适合处理格式固定的数据。
立即学习“Java免费学习笔记(深入)”;
- 用useDelimiter("\\s+")设为空白符分隔(默认就是这个)
- 用useDelimiter(",")读逗号分隔的CSV片段
- 用useDelimiter("\\D+")跳过所有非数字字符,只提取数字
- 配合hasNextXXX()判断是否有对应类型数据,避免NoSuchElementException
安全读取与异常处理
用户输入不可控,必须考虑非法输入场景。
- 用hasNextInt()、hasNextDouble()等预判,再调nextXXX(),防止程序崩溃
- 捕获InputMismatchException,提示用户重新输入
- 对nextLine()结果做trim()和null/empty校验,避免空输入引发逻辑错误
- 读完及时调用scanner.close()释放资源(尤其在循环外使用时)










