我正在解析文档,我收到以下错误:
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)