Java—如何让验证器检查输入是否为双精度和整数

Java—如何让验证器检查输入是否为双精度和整数,java,validation,double,Java,Validation,Double,我的问题实际上只是关于我应该把检查的代码放在哪里,以确保输入是一个整数。感谢所有帮助我的人 public static String getQuantity(String aQuantity){ while (isValidQuantity(aQuantity)== false ){ errorMessage += "Enter Valid quantity\n"; } return aQuantity; } private static

我的问题实际上只是关于我应该把检查的代码放在哪里,以确保输入是一个整数。感谢所有帮助我的人

public static String getQuantity(String aQuantity){
    while (isValidQuantity(aQuantity)== false ){
        errorMessage += "Enter Valid quantity\n";
    }
    return aQuantity;
    }
    private static boolean isValidQuantity(String aQuantity){
    boolean result = false;
    try{
        Double.parseDouble(aQuantity);
     //here?//
        result = true;
    }catch(Exception ex){
        result = false;
    }

    return result;
}

您可以使用正则表达式轻松地完成此操作。双重用途:

Pattern.compile("\\d+\\.\\d+")
Pattern.compile("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")
如果您想在科学符号中使用双精度符号(例如
3.4-e20
),请使用以下方法:

Pattern.compile("\\d+\\.\\d+")
Pattern.compile("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")
对于整数,您只需在上述每个正则表达式中使用
前面的部分即可。像

Pattern.compile("\\d+")
对于可能有符号的数字

Pattern.compile("[-+]?[0-9]+")
注意最后一个结尾处的
+
。必须至少有一个数字才能将其限定为数字,因此不能使用
*
,这意味着零次或多次出现

正则表达式的Javadocs


在中测试double的模式。

您的解决方案应该有效,因为任何整数也将解析为double。您可以让它更详细,让
0
表示无效
1
表示int,让
2
表示double

private static int isValidQuantity(String aQuantity){
    int result = 0;
    //first try int
    try{
        Integer.parseInt(aQuantity);
        result = 1; //the parse worked
    }catch(NumberFormatException ex){
        result = 0;
    }

    if(result == 0)
    {
        //if it's not an int then try double
        try{
            Double.parseDouble(aQuantity);

            result = 2; //the parse worked
        }catch(NumberFormatException ex){
            result = 0;
        }
    }

    return result;
}

简单的正则表达式怎么样?引发
异常
绝对不是一个选项,被认为是不好的风格。您已经在尝试捕获中包装了它。parseDouble将抛出和NumberFormatException。您可以退出,也可以执行其他操作,如设置默认值。正则表达式是一个最好的功能,它可以轻松识别字符串并验证字符串。。程序流应该首先根据正则表达式验证字符串,然后尝试解析它。。这个流的优点是在将它解析为double或float时不需要任何异常处理。我要说的是,很多开发人员都是这样看待它的。性能方面的正则表达式往往更昂贵。我更多地使用它们进行过滤,而不是验证。你可以征求很多意见。。我更喜欢在有意义的时候快速而廉价地失败。@不幸的是,Audit
Exception
s应该是异常的(正如名称所示),而不是控制程序流的一种方式。抛出并随后捕获异常肯定比设置一个简单的有效格式输入检查花费更多。