3

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

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

案例一:

String expected = "3"; 

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

案例B:

int expected = 3;

int actualInt = Integer.parseInt(actual);

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

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

4

3 回答 3

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
}

即使您知道字符串总是会有一个“数字”值,但实现异常处理仍然是一个好习惯。比担心更安全:)

于 2012-11-07T05:43:48.423 回答
2

如果您只想进行相等性检查,那么我认为案例 A 很好,因为您没有执行任何需要您输入数字而不是字符串的操作。

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

但是 case B 的优点是,如果您需要确保字符串实际上是一个整数,在这种情况下,您将不得不使用 case B。

于 2012-11-07T05:45:02.713 回答
1

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

String 迎合了这些方法,以将对象隐式转换为其相应的字符串表示形式。

这是一个例子。

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

假设“实际”是传递的参数。您可能想对变量“实际”进行空检查。

于 2012-11-07T05:56:05.397 回答