java.lang.NumberFormatException:对于输入字符串:“”

时间:2011-03-31 22:32:26

标签: java numberformatexception

当我尝试这样做时:

total = Integer.parseInt(dataValues_fluid[i]) + total;

它会给我一个错误信息

java.lang.NumberFormatException: For input string: " "

有些值是“”。这就是为什么它给了我。但我试过了

int total = 0;
for(int i=0; i<counter5; i++){

if(dataValues_fluid[i]==" "){dataValues_fluid[i]="0";}

total = Integer.parseInt(dataValues_fluid[i]) + total;
}

我仍然遇到同样的java.lang.NumberFormatException错误。

6 个答案:

答案 0 :(得分:5)

我假设dataValues_fluid[]是一个String的数组。如果是这种情况,则无法使用==比较运算符 - 您需要使用if(dataValues_fluid[i].equals(" "))

因此,您的parseInt()正在尝试解析空格字符,从而产生NumberFormatException

答案 1 :(得分:1)

不是使用==将字符串与" "进行比较,而是执行此操作:

if (" ".equals(dataValues_fluid[i]) { dataValues_fluid[i] = "0"; }

请注意使用==.equals()与字符串之间的区别。 ==不能用于比较Java中的字符串 - 您必须使用.equals()方法。

http://leepoint.net/notes-java/data/expressions/22compareobjects.html

答案 2 :(得分:1)

您需要使用equals比较字符串:

if(dataValues_fluid[i].equals(" ")){dataValues_fluid[i]="0";}

一般来说,更优雅的方法是捕获NumberFormatException并在这种情况下将值设置为0.

答案 3 :(得分:0)

您可以在try / catch块中包含添加到总计的行,因此将忽略任何无效的数字(如果您想了解错误,可以记录错误)。

try {
    total += Integer.parseInt(dataValues_fluid[i]);
} catch (NumberFormatException ignored) {}

通过这种方式,您将忽略任何非数字值,而不仅仅是空格,您的程序也会运行良好(同样安全,记录该异常或在发生时执行一些双重检查)。

如果数字无效,则不会向您的总数中添加任何内容,因此您的程序将按预期执行。

答案 4 :(得分:0)

我认为Andy White的链接足以让你的想法,但如果你需要另外详细解释为什么“==”运算符不起作用以及有什么替代方案(实际上有一些),请检查此链接: http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml

以下是其他相同方法的API文档信息: http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#equals%28java.lang.Object%29

答案 5 :(得分:0)

您可以使用此代码。 问题是要验证您的状况。 因此,我使用了双重验证来优化一些内存。

int total = 0;
for(int i=0; i<counter5; i++){
total += Integer.parseInt(dataValues_fluid[i].equals(" ") ? "0" : dataValues_fluid[i]) ;
}

在方法中,您可以使用“ throws NumberFormatException” else

try {
  int total = 0;
  for(int i=0; i<counter5; i++){
   total += Integer.parseInt(dataValues_fluid[i].equals(" ") ? "0":dataValues_fluid[i]);
  }
}catch(NumberFormatException e){
  e.printStackTrace() ; 
}