java.lang.NumberFormatException:对于输入字符串:";空";
我正在分析一个文档,出现以下错误:java.lang.NumberFormatException:对于输入字符串:";空";,java,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 CentroidGener
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)
这是引发异常的代码部分:
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);
//}
}
if(纬度!=null){
//如果(!latitude.equals(“null”)){
String[]latValues=latitude.split(“”);
浮点数和=0;
对于(int i=0;i
如您所见,我试图检查“null”字符串,但即使取消注释第二条if语句,也会收到相同的错误
谢谢可能其中一个值是“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);
根据您的错误,很可能您的
latValues[i].trim()
会显示值“null
”。我可以在这里复制您的问题:-
Float.valueOf("null");
这是stacktrace:-
java.lang.NumberFormatException: For input string: "null"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1301)
at java.lang.Float.valueOf(Float.java:375)
换句话说,您拥有的值不是null,但它包含单词“null”
如果执行
Float.valueOf(null)
,它实际上为您提供了一个NullPointerException
,这不是您在这里所拥有的。为了避免像“1 2”这样的字符串出现问题,多个空格提供空值,最好在循环中添加一个try-catch,如下所示:
if (latitude != null) {
String[] latValues = latitude.split(" ");
float sum = 0;
for (int i = 0; i < latValues.length; i++) {
try {
sum = sum + Float.valueOf(latValues[i].trim()).floatValue();
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
latitude = Float.toString(sum / (float) latValues.length);
}
if(纬度!=null){
String[]latValues=latitude.split(“”);
浮点数和=0;
对于(int i=0;i
微调功能的调用是无用的。如果您确实希望筛选输入数据以避免出现数字格式异常,您可以在中找到代码,很明显,问题在于您的输入行中包含字符“null”
,而不是其中一个数字。但我认为忽略空值不一定是正确的做法
首先,您需要弄清楚这些空值的真正含义:
- 它们是否表示缺少数据点(纬度值)李>
- 它们是捕获原始纬度数据的代码中的错误的症状吗
- 它们是从输入文件/数据库读取数据的代码中的错误的症状吗
Integer.parseInt(“0”+“”.trim())尝试在for循环中添加System.out.println(latValues[i].trim())可能是因为间距问题而将null值作为latValues之一?还有一个可能是在if语句之后,将LatitudeRoll打印回修订版1:由于删除的注释在文本和答案(“第二个if语句…”)中被处理,您忘记关闭.equals(“null”)上的引号。要100%确定,它应该是:
if(!latValues[i].trim().equals(“null”))
如果字符串的数值之间有多个空格,则仍会出现异常。
if (latitude != null) {
String[] latValues = latitude.split(" ");
float sum = 0;
for (int i = 0; i < latValues.length; i++) {
try {
sum = sum + Float.valueOf(latValues[i].trim()).floatValue();
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
latitude = Float.toString(sum / (float) latValues.length);
}