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
相关产品推荐
相关产品推荐

