使用parseDouble检查null的更短方法?

时间:2011-06-08 19:59:42

标签: java

amountStr是一个偶尔包含表示为字符串的double值的值。

我想使用Double.parseDouble将其读入double变量:amountDbl

this.amountDbl = Double.parseDouble(amountStr);

如果NullPointerException没有值,似乎会抛出amountStr

这是否意味着我每次都要写这样的支票?

if(amountStr!=null)
    this.amountDbl = Double.parseDouble(amountStr);

因为我的代码中有这么多这样的语句,所以我希望能够以更简洁的方式进行此检查(或避免使用它)。

8 个答案:

答案 0 :(得分:12)

如果您使用ternary operator

,则会得到一个更简洁的表达式
this.amountDbl = amountStr != null ? Double.parseDouble(amountStr) : 0;

或编写自己的效用函数

public static double parseDoubleOrNull(String str) {
    return str != null ? Double.parseDouble(str) : 0;
}

并做

this.ammountDbl = parseDoubleOrNull(ammountStr);

但请注意,这并不能保护您免受格式错误的双打。如果这是一个问题,我建议您使用效用函数并执行以下操作:

public static double parseDoubleSafely(String str) {
    double result = 0;
    try {
        result = Double.parseDouble(str);
    } catch (NullPointerException npe) {
    } catch (NumberFormatException nfe) {
    }
    return result;
}

如果您正在使用简洁的代码,您甚至可以

import static pkg.UtilClass.parseDoubleSafely;

答案 1 :(得分:1)

  • 为构造函数/工厂中处理此测试的金额创建一个包装类,或者作为特殊情况处理空金额,例如Null option pattern
  • 使用像guava这样的Java实用程序库来实现Optional(预计将在Guava r10中出现)
  • Google Guava有T firstNonNull(T first,T second)可用作Double.parseDouble( Objects.firstNonNull(amountStr,"0") )

  • (切换到Scala并使用Option Pattern

答案 2 :(得分:0)

为什么不预先将它初始化为“默认”值?

String amountStr = /* some default value */

然后,当您使用该变量时,请检查该特殊情况。

if (amountDbl != /* some default value */)
    //parse it

答案 3 :(得分:0)

你总是可以用try / catch包围它或者使用三元运算符(就像aioobe那样)

try{
   this.amountDbl = Double.parseDouble(amountStr);
} catch (Exception ex){
ex.printStackTrace();
}

答案 4 :(得分:0)

这不是更好,但你可以这样做:

this.amountDbl = Double.parseDouble(amountStr==null ? "" : amountString);

答案 5 :(得分:0)

可能要迟到才能回答这个问题。 org.apache.commons.lang3.math包中的NumberUtils类有一个方法createDouble,可以满足您的要求(https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/math/NumberUtils.html#createDouble-java.lang.String-

答案 6 :(得分:0)

我正在初始化一个对象,需要从String转换为Double并从String运行为空值。

A a = new A(value1,value2 == null?null:Double.parseDouble(value2),value3 ....);

答案 7 :(得分:-1)

我用这个:

Double.parseDouble(str.isEmpty()" 0":STR);

Double.parseDouble((STR == NULL || str.isEmpty())" 0":STR);