amountStr
是一个偶尔包含表示为字符串的double值的值。
我想使用Double.parseDouble
将其读入double
变量:amountDbl
。
this.amountDbl = Double.parseDouble(amountStr);
如果NullPointerException
没有值,似乎会抛出amountStr
。
这是否意味着我每次都要写这样的支票?
if(amountStr!=null)
this.amountDbl = Double.parseDouble(amountStr);
因为我的代码中有这么多这样的语句,所以我希望能够以更简洁的方式进行此检查(或避免使用它)。
答案 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)
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);