Java中没有"tryParseDouble"?

The*_*One 8 java

可能重复:
如何检查String是java中的数字类型

我看到我可以通过使用解析String成a .doubleDouble.parseDouble

既然那个人可能会抛出一个NumberFormatException,我不想通过异常进行编程,我会犹豫将parseDouble调用放入try/ catchblock只是为了检查字符串是否可以解析成a double.

在Delphi中,有TryParseInt(我认为),如果字符串无法解析为,则返回一个定义的值(我认为是-1)Integer.

在Java中没有类似的东西?我的意思是:没有标准的方法可以做到这一点?

And*_*yle 6

执行此操作的标准方法是:

double d;
try {
    d = Double.parseDouble(input);
}
catch (NumberFormatException e) {
    // Use whatever default you like
    d = -1.0;
}
Run Code Online (Sandbox Code Playgroud)

如果您愿意,这当然可以作为库方法包装.

总的来说,我不会错过这不是语言的一部分 - 如果一个字符串形成错误,它并不代表-1所以正确的做法是抛出异常.如果你想为治疗这种-1你可以这样做,但有非常微弱的理由,使这个标准库的行为(为什么-10NaNnull?).


Pet*_*rey 4

你遇到的问题是你有两种可能的结果。要么你有一个有效的双精度,要么你没有。如果您有一个返回值,您需要检查,您可能会忘记检查,或者您对每个值都有一个 if 检查。

try {
    double d = Double.parseDouble(input);
    double d2 = Double.parseDouble(input2);
    double d3 = Double.parseDouble(input3);
    double d4 = Double.parseDouble(input4);
    // all number are good.

} catch (NumberFormatException e) {
    e.printStackTrace(); //prints error
}
Run Code Online (Sandbox Code Playgroud)

或者

double d, d2, d3, d4;
if (tryParseDouble(input)) {
    d = parseDouble(input);

    if (tryParseDouble(input2)) {
        d2 = parseDouble(input2);

        if (tryParseDouble(input3)) {
            d3 = parseDouble(input3);

        } else {
            if (tryParseDouble(input4)) {
                d4 = parseDouble(input4);

            } else {
                System.out.println("Cannot parse " + input4);
            }

            System.out.println("Cannot parse " + input3);
        }

    } else {
        System.out.println("Cannot parse " + input2);
    }

} else {
    System.out.println("Cannot parse " + input);
}
Run Code Online (Sandbox Code Playgroud)