作为String数据类型接收的数值输入参数的等式测试

时间:2012-11-07 05:34:07

标签: java

我收到一个数值输入参数,它是一个String数据类型(我无法更改),我需要检查收到的这个值是否为某个数字。即检查值是否为5。

知道String数据类型的接收值,但在任何时候它都应该只包含数字。我首先将值转换为整数数据类型,然后执行相等性测试。即案例B如下所示。

案例A:

String expected = "3"; 

if(expected.equals(actual)) //...

案例B:

int expected = 3;

int actualInt = Integer.parseInt(actual);

if(expected == actualInt) //...

我想知道使用案例B进行相等测试是否有任何缺点,因为我更倾向于以这种方式做出正确的出路。

3 个答案:

答案 0 :(得分:4)

使用Try-Catch:

int expected = 3;
int actualInt;
try
{
    actualInt = Integer.parseInt(actual);

    if(expected == actualInt) //...
}
catch(NumberFormatException ex)
{
    // You will reach here when a bad input is given to the parseInt method
    // Handle the failure
}
catch(Exception e)
{
    // All other exceptions here
}

即使您知道字符串总是具有“数字”值,但实现异常处理仍然是一种很好的做法。比安心更安全:)

答案 1 :(得分:2)

如果你只是要进行等式检查,那么我认为案例A没问题,因为你没有做任何需要你的数字而不是字符串的操作。

我只能看到案例B的缺点,就是你必须解析字符串中的数字以进行相等检查。

但是案例B的优点是,如果你需要确保字符串实际上是一个整数,那么你必须使用案例B.

答案 2 :(得分:1)

您是否考虑过在String类中使用静态工厂方法valueOf()的重载版本。

String使用这些方法来隐式地将对象转换为相应的字符串表示。

这是一个例子。

int expected = 3;
String.valueOf(expected).equalsIgnoreCase(actual); // is the equality check for numbers.

假设'actual'是传递的参数。您可能希望对变量'actual'进行空检查。