Java基础 - 判断用户输入的类型Scanner类的hasNextInt(),hasNextFloat()...方法

为了保证用户输入的数据不会引起系统奔溃,这里提供一个在系统接收用户输入之前,就判断用户输入的数据是否符合要求,符合要求就接收,不符合要求就拒收
以输入int类型的数据为例

public class Demo1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		if(input.hasNextInt()) {
			int num = input.nextInt();
			System.out.println("你输入的是:"+num);
		}else {
			System.out.println("你输入一个锤子");
		}
	}
}
请输入一个数字:
abc
你输入的是个锤子
请输入一个数字:
123
你输入的是:123

感兴趣的朋友可以查看Scanner类中hasNextInt()的源码:

public boolean hasNextInt(int radix) {
    setRadix(radix);
    boolean result = hasNext(integerPattern());
    if (result) { // Cache it
        try {
            String s = (matcher.group(SIMPLE_GROUP_INDEX) == null) ?
                processIntegerToken(hasNextResult) :
                hasNextResult;
            typeCache = Integer.parseInt(s, radix);
        } catch (NumberFormatException nfe) {
            result = false;
        }
    }
    return result;
}
### 如何在 Java 中检测 Scanner 输入的数据类型Java 中,`Scanner` 提供了多种方法来检查输入数据的类型。这些方法通常以 `hasNextXXX()` 的形式存在,其中 `XXX` 表示要检查的具体数据类型。如果调用该方法返回 `true`,表示下一个可用令牌匹配指定的模式;否则返回 `false`。 以下是常见的几种方法及其功能: #### 1. 检测整数型输入 可以通过 `hasNextInt()` 方法判断输入是否为整数。 ```java if (scanner.hasNextInt()) { int number = scanner.nextInt(); } ``` 此方法会尝试将当前输入解析为一个十进制整数值[^2]。 #### 2. 检测浮点数输入 对于浮点数类型的检测,可以使用 `hasNextDouble()` 或者更通用的 `hasNextFloat()` 方法。 ```java if (scanner.hasNextDouble()) { double decimalNumber = scanner.nextDouble(); } ``` 上述代码片段展示了如何通过 `hasNextDouble()` 判断并读取双精度浮点数[^4]。 #### 3. 字符串输入验证 当需要确认下一部分输入是一个完整的字符串时,可利用 `hasNextLine()` 进行判定。 ```java if (scanner.hasNextLine()) { String line = scanner.nextLine(); } ``` 这里需要注意的是,`nextLine()` 不仅能捕获空白字符之外的内容,还能获取整个行的信息[^1]。 #### 4. 布尔值识别 为了测试是否存在布尔值(即 true/false),应该采用如下方式: ```java if (scanner.hasNextBoolean()) { boolean flag = scanner.nextBoolean(); } ``` 这一步骤能够有效地区分简单的逻辑状态值。 #### 5. 自定义模式匹配 除了内置的基础类型外,还可以借助正则表达式的强大能力来自定义复杂条件下的类型检验。例如设置特定格式日期或者电子邮件地址等特殊需求场景中的应用实例展示如下所示: ```java // 定义邮箱正则规则 String emailPattern = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}"; scanner.useDelimiter("\\Z"); // 单次扫描全部内容 if (scanner.findInLine(emailPattern) != null){ System.out.println("Valid Email Found!"); } else{ System.out.println("No Valid Email."); } ``` 以上例子说明了如何结合自定义正则表达式实现更加灵活精确的数据校验操作[^3]。 ### 总结 综上所述,在实际开发过程中合理运用 `Scanner` 提供的各种预设以及扩展机制可以帮助我们轻松完成不同类型数据的有效性核查工作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值