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

Java异常处理实现输入类型检测:区分字符串与整数输入

Java输入类型校验的异常实现方案

核心问题直接解答

针对提出的两个技术困惑,对应解决逻辑如下:

  • 如何判断输入是字符串还是整数类型:无需手动编写字符遍历、正则匹配的类型判断逻辑。Scanner.nextInt()方法本身内置了类型匹配规则,会自动尝试将当前读取的输入片段转换为整数,若遇到非整数格式的字符串(比如纯字母、带小数点的数字),会直接抛出InputMismatchException,这个异常就是类型不匹配的判定依据。
  • 如何正确使用try/catch实现捕获:try块仅需要包裹可能抛出类型异常的代码行(也就是读取age的nextInt()语句),无需扩大范围包裹循环、正常打印等不会触发异常的逻辑;catch块定向捕获InputMismatchException,按照需求在捕获后直接终止程序即可。

实现逻辑要点

  • 异常触发时机完全贴合需求:当同一行第二个输入不是整数格式时,nextInt()会自动触发异常,不需要额外写判断分支。
  • 异常捕获后的处理严格匹配要求:捕获到类型不匹配异常后直接终止程序,不做输入重试、错误值跳过等额外逻辑,避免出现不符合预期的运行行为。
  • 尽可能缩小try块的覆盖范围,防止误捕获其他非预期的异常。

完善后的可运行代码

import java.util.Scanner;
import java.util.InputMismatchException;

public class NameAgeChecker {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);

        String inputName;
        int age;
        
        inputName = scnr.next();
        while (!inputName.equals("-1")) {
            try {
                // 仅将可能抛出类型异常的语句放入try块
                age = scnr.nextInt();
                System.out.println(inputName + " " + (age + 1));
            } catch (InputMismatchException e) {
                System.out.println("输入类型错误:第二个输入应为整数,程序终止");
                // 以异常状态退出程序
                System.exit(1);
            }
            
            // 类型校验通过后,读取下一个用户名进入循环
            inputName = scnr.next();
        }
        scnr.close();
    }
}

运行效果说明

  • 正常输入zhangsan 18时,程序会输出zhangsan 19,继续读取下一组输入。
  • 当输入lisi abc时,nextInt()会触发InputMismatchException,程序捕获后输出错误提示并直接终止,符合需求。
  • 当输入-1时,程序正常退出循环,结束运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 20:45:10