17370845950

在Java里如何使用Scanner读取输入_控制台输入解析
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支持自定义分隔符,适合处理格式固定的数据。

  • useDelimiter("\\s+")设为空白符分隔(默认就是这个)
  • useDelimiter(",")读逗号分隔的CSV片段
  • useDelimiter("\\D+")跳过所有非数字字符,只提取数字
  • 配合hasNextXXX()判断是否有对应类型数据,避免NoSuchElementException

安全读取与异常处理

用户输入不可控,必须考虑非法输入场景。

  • 用hasNextInt()、hasNextDouble()等预判,再调nextXXX(),防止程序崩溃
  • 捕获InputMismatchException,提示用户重新输入
  • 对nextLine()结果做trim()和null/empty校验,避免空输入引发逻辑错误
  • 读完及时调用scanner.close()释放资源(尤其在循环外使用时)