java.lang.NumberFormatException:对于输入字符串:"null"

ane*_*yzm 4 java

我正在解析文档,我收到以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "null"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
    at java.lang.Float.valueOf(Float.java:388)
    at CentroidGenerator$Centroid.averageLat(CentroidGenerator.java:403)
    at CentroidGenerator.getCentroids(CentroidGenerator.java:30)
    at CentroidGenerator.main(CentroidGenerator.java:139)
Run Code Online (Sandbox Code Playgroud)

这是抛出异常的代码的一部分:

if (latitude!=null) {
    //if (!latitude.equals("null")) {
        String[] latValues = latitude.split(" ");
    float sum = 0;
    for (int i = 0; i < latValues.length; i++) {                
        sum = sum + Float.valueOf(latValues[i].trim()).floatValue();
    }
    latitude = Float.toString(sum / (float) latValues.length);
    //}
}   
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我已经尝试检查"null"字符串,但即使取消注释第二个if语句,我也会得到相同的错误.

谢谢

MBy*_*ByD 13

也许其中一个值是"null"(例如,字符串:) "123.4 null 5 null"而不是第一个,所以我认为一个合适的解决方案是:

String[] latValues = latitude.split(" ");
float sum = 0;
for (int i = 0; i < latValues.length; i++) {              
    if (!latValues[i].equals("null"))
        sum = sum + Float.valueOf(latValues[i].trim()).floatValue();
}
latitude = Float.toString(sum / (float) latValues.length);
Run Code Online (Sandbox Code Playgroud)

或者,在for循环中添加try-cath并忽略非数字的值.

编辑

正如评论中指出的那样(Sualeh),最好使用try/catch,因为今天它是"null",明天它是其他东西(即双空格......).

try {
sum = sum + Float.valueOf(latValues[i].trim()).floatValue();
}
catch (NumberFormatException e)
{
// log e if you want...
}
Run Code Online (Sandbox Code Playgroud)