Java中hasNextInt()的使用场景和注意事项

 更新时间:2026年05月13日 08:28:06   作者:rx123000  
hasNextInt()方法是判断控制台接收是否为整型数字,而不是接收数据,这篇文章主要介绍了Java中hasNextInt()的使用场景和注意事项的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、hasNextInt()介绍

hasNextInt() 是 Java 中 Scanner 类的一个方法,用于检查输入流中是否存在下一个可解析为整数的“标记/段落”。仅检查输入流状态,不会消耗输入。

所属类:java.util.Scanner(需要导入该类)

返回值:boolean 类型(true 表示存在整数标记,false 表示不存在)

import java.util.Scanner;
public class InputTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入整数:");
        while (sc.hasNextInt()) {  //检查下一个“段落”是否为整数,是则返回ture,只检测不消耗
            int num = sc.nextInt();  //读取并消耗该整数
            System.out.println("输入的整数是:" + num);
        }
        
        System.out.println("非整数输入,程序退出。");
        sc.close();
    }
}

二、工作原理

需要注意的是hasNextInt()只检测下一个“段落”,默认以空白字符(空格、回车、制表符等)作为分隔符,将输入流拆分为多个“段落”。

例如输入多个回车符,此时只有分隔符没有产生“段落”,hasNextInt()仍会等待输入

输入“回车回车123  abc  回车”(中间有空格),hasNextInt()检测到下一个段落内容为“123”,返回true。并且输入的“回车回车123  abc  回车”仍留着输入缓冲区中,所以要留意接下来缓冲区内的处理方法。

三、使用场景

1、学生管理系统中需要录入学生的年龄,若直接用nextInt()接收收入,非法的输入内容(非整数输入)会让程序异常终止。为了程序的健壮性,使用hasNextInt()+nextInt()配合,避免因输入非整数而导致程序崩溃。

Scanner sc = new Scanner(System.in);
Student st = new Student();
System.out.println("请输入学生年龄:");
while (!sc.hasNextInt()) {  //判断下一个段落是否为整数
    System.out.println("请输入整数!");
    sc.next();  //消耗这个非整数段落
}
st.setAge(sc.nextInt());

2、菜单选项要求输入1-5之间的整数

//处理用户输入:确保输入为1-5之间的整数
while (true) {
    if (!sc.hasNextInt()) {
        System.out.println("输入错误,请输入数字!");
        sc.next(); //清空非整数输入
    } else {
        num = sc.nextInt();
        if (num >= 1 && num <= 5) {
            break; //输入正确,跳出循环
        } else {
            System.out.println("输入错误,请输入1-5之间的数字!");
        }
    }
}

四、注意事项

1、hasNextInt()最好与nextInt()配合使用,并注意处理输入缓冲区内的残留

例如输入“回车回车123  abc  回车”(中间有空格),hasNextInt()会返回true,接下来若用nextLine()接收仅会消耗一个回车符,仍会剩余“回车123  abc  回车”。

用nextInt()接收,会消耗123及之前的回车符,在正确接收123整数后,要注意及时清理缓冲区内剩余“  abc  回车”,避免影响后面的程序运行。

2、hasNextInt()无法回车符对出响应

场景例如,学生管理系统中需要修改某个已存在的学生的信息,功能需求为提示修改当前学生年龄后,用户可以输入新年龄、也可以按回车跳过保持原来年龄,同时对非整数输入做出响应。

由于hasNextInt()、nextInt()、next()均会跳过前导空白(空格、回车、制表符等分隔符),直接取用自己所需要的“段落”,其中nextInt()、next()会消耗下一个段落及段落前的分隔符。

所以使用hasNextInt()过滤非整数输入时,也过滤了回车输入,无法对回车符等输入单独做出响应。

需要用nextLine()对回车符对出响应,并使用isEmpty()和Integer.parseInt()等对录入的字符串再做判断和处理。

System.out.println("当前年龄:" + st.getAge());
while (true) {
    System.out.println("请修改学生年龄(若不修改按回车跳过):");
    String age = sc.nextLine();
    if (age.isEmpty()) {
        break;  //回车跳过
    } else if (stringToInt(age) >= 0) {  //自定义了个stringToInt方法用于字符串转数字,并判断非整数返回-1。
       st.setAge(stringToInt(age));
       break;
   } else {
        System.out.println("输入错误,请输入整数!");
    }
}

五、替代hasNextInt()的其他方法

1、使用try-catch

try-catch 是 Java 中用于异常处理的核心语法结构,其主要作用是捕获并处理程序运行时可能出现的异常,防止程序因未处理的异常而直接崩溃,同时允许程序在遇到异常后继续执行后续逻辑。

sc.nextInt() 尝试读取整数时,发现输入是字符串,抛出 InputMismatchException 异常。

try {
    System.out.print("请输入一个整数:");
    int num = sc.nextInt();  //可能抛出 InputMismatchException 的代码
    System.out.println("您输入的整数是:" + num);
} catch (InputMismatchException e) {
    System.out.println("输入错误,请输入整数!");  //处理异常的逻辑
    sc.next();  //清空缓冲区,避免无限循环
}

总结 

到此这篇关于Java中hasNextInt()的使用场景和注意事项的文章就介绍到这了,更多相关Java中hasNextInt()使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java多线程加锁以及Condition类的使用实例解析

    java多线程加锁以及Condition类的使用实例解析

    这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • spring boot配置druid连接池的完整步骤

    spring boot配置druid连接池的完整步骤

    这篇文章主要给大家介绍了关于spring boot配置druid连接池的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Spring Boot 中starter的原理详析

    Spring Boot 中starter的原理详析

    这篇文章主要介绍了Spring Boot 中starter原理详析,文章围绕主题展开springboot的插件机制和starter原理相关资料,需要的小伙伴可以参考一下
    2022-06-06
  • junit4教程junit4.5官方下载

    junit4教程junit4.5官方下载

    前提:本文假设读者已经具有使用JUnit 4以前版本的经验。
    2008-09-09
  • springboot、Mybatis-plus工程多数据源字段映射不生效问题及解决

    springboot、Mybatis-plus工程多数据源字段映射不生效问题及解决

    在Spring Boot多数据源项目中,使用MyBatis-Plus时发现字段映射不生效,通过在application配置文件和Java配置类中添加驼峰命名转换配置,解决了问题
    2026-01-01
  • java Thumbnails 图片处理的使用

    java Thumbnails 图片处理的使用

    这篇文章主要介绍了java Thumbnails 图片处理的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java Swing GridBagLayout网格袋布局的实现

    Java Swing GridBagLayout网格袋布局的实现

    这篇文章主要介绍了Java Swing GridBagLayout网格袋布局的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • java连接orcale数据库示例分享

    java连接orcale数据库示例分享

    这篇文章主要介绍了java连接orcale数据库示例,需要的朋友可以参考下
    2014-02-02
  • Spring @ComponentScan注解扫描组件原理

    Spring @ComponentScan注解扫描组件原理

    这篇文章主要介绍了Spring @ComponentScan自动扫描组件使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • java链表数据结构LinkedList插入删除元素时间复杂度面试精讲

    java链表数据结构LinkedList插入删除元素时间复杂度面试精讲

    这篇文章主要为大家介绍了java LinkedList插入和删除元素的时间复杂度面试精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论