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

如何对String类型数值做大小比较?输入非数字触发NumberFormatException

String类型存储数字输入的校验问题

需求与现有代码

我需要实现一个功能:要求用户输入0到180之间的数字,但存储输入值的变量必须为String类型。编写的代码如下:

// Saisie du nombre de jours de location
System.out.println("Entrez le nombre de jours de location (supérieur à 0 et inférieur ou égal à 180) : ");
nbJoursLouer = Clavier.lireString();
while ( nbJoursLouer < "0" || nbJoursLouer > "180") {
    System.out.println("Entrée invalide !");
    System.out.println("Entrez le nombre de jours de location (supérieur à 0 et inférieur ou égal à 180) : ");
    nbJoursLouer = Clavier.lireString();
}

遇到的异常

运行程序时,若输入字母而非数字,会抛出如下异常:

Entrez le nombre de jours de location (supérieur à 0 et inférieur ou égal à 180) : 
d
Exception in thread "main" java.lang.NumberFormatException: For input string: "d"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Integer.parseInt(Integer.java:668)
    at java.base/java.lang.Integer.parseInt(Integer.java:786)
    at Tp1.main(Tp1.java:100) 

疑问

能否对String类型使用>和<运算符进行大小比较?


解答

1. String类型不能直接用>、<做数值大小比较

Java中,>和<运算符仅支持基本数据类型(如int、double)的数值比较,或是引用类型的内存地址比较(这对业务逻辑毫无意义)。直接对String使用这些运算符,编译器会直接报错,你现有代码的写法本身无法通过编译。

你遇到的NumberFormatException,是因为后续代码中调用了Integer.parseInt(nbJoursLouer)将字符串转为整数,当输入非数字内容时,这个转换就会抛出异常。

2. 修正后的输入校验方案

要满足「用String存储输入+校验0-180的数字」的需求,需要分两步校验:先确认输入是合法整数,再判断数值范围。以下是两种可行的实现方式:

方式一:用try-catch捕获转换异常

// 租赁天数输入
System.out.println("Entrez le nombre de jours de location (supérieur à 0 et inférieur ou égal à 180) : ");
String nbJoursLouer = Clavier.lireString();
boolean isValid = false;

while (!isValid) {
    try {
        // 尝试将字符串转为整数,校验是否为合法数字
        int days = Integer.parseInt(nbJoursLouer);
        // 校验数值范围
        if (days > 0 && days <= 180) {
            isValid = true;
        } else {
            System.out.println("Entrée invalide ! La valeur doit être entre 1 et 180.");
            System.out.println("Entrez le nombre de jours de location : ");
            nbJoursLouer = Clavier.lireString();
        }
    } catch (NumberFormatException e) {
        // 输入非数字时触发
        System.out.println("Entrée invalide ! Veuillez saisir un nombre entier.");
        System.out.println("Entrez le nombre de jours de location : ");
        nbJoursLouer = Clavier.lireString();
    }
}
// 此时nbJoursLouer为符合要求的String类型数字

方式二:用正则表达式先校验格式

System.out.println("Entrez le nombre de jours de location (supérieur à 0 et inférieur ou égal à 180) : ");
String nbJoursLouer = Clavier.lireString();

while (!nbJoursLouer.matches("^[0-9]+$") || Integer.parseInt(nbJoursLouer) <= 0 || Integer.parseInt(nbJoursLouer) > 180) {
    if (!nbJoursLouer.matches("^[0-9]+$")) {
        System.out.println("Entrée invalide ! Veuillez saisir un nombre entier.");
    } else {
        System.out.println("Entrée invalide ! La valeur doit être entre 1 et 180.");
    }
    System.out.println("Entrez le nombre de jours de location : ");
    nbJoursLouer = Clavier.lireString();
}

这两种方式都能确保输入合法,同时保留变量的String类型,避免异常抛出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:40:21