2011-05-10 66 views
0

我正面临此运行时错误**"Exception in thread "main" java.lang.NumberFormatException: For input string: "" "**请帮我解决这个问题。Java代码中的运行时错误“线程中的异常”主“java.lang.NumberFormatException:对于输入字符串:”

下面是一小段代码片段:

package SampleC; 
import java.io.File; 
import java.io.IOException; 
import java.util. *; 


import jxl.*; 
import jxl.read.biff.BiffException; 


import jxl.write.WriteException; 

import java.util.ArrayList; 
import java.util.Vector; 

public class Test { 
    public static void main(String args[])throws IOException, BiffException, WriteException { 
    { 
     try 
     { 
     Workbook workbook=Workbook.getWorkbook(new File("C:\\Documents and Settings\\snandam\\Desktop\\readvalues.xls")); 

     Sheet sheet =workbook.getSheet(0); 
    // String[] s=new String[200]; 
     int[] s = new int [200]; 
     Cell[][] cell=new Cell[100][100]; 

     ArrayList<Integer> myList = new ArrayList<Integer>(); 
     { 


     for(int i=0;i<sheet.getColumns();i++) 
     { 
      for(int j=0;j<sheet.getRows(); j++) 
      { 
      cell[i][j] = sheet.getCell(i, j); 

      s[i]=Integer.parseInt(cell[i][j].getContents()); 

      // System.out.printf("%s\n", s[i]); 
      Collections.addAll(myList, s[i]); 


      } 



     } 


     ArrayList<Integer> a1 = new ArrayList<Integer>(); 
     a1.add(3);a1.add(-3);a1.add(-8);a1.add(0); 

     ArrayList<Integer> a2 = new ArrayList<Integer>(); 
     a2.add(-1);a2.add(-4);a2.add(-7);a2.add(6); 

     ArrayList<Integer> a3 = new ArrayList<Integer>(); 
     a3.add(1);a3.add(5);a3.add(6);a3.add(7); 

     ArrayList<Integer> a4 = new ArrayList<Integer>(); 
     a4.add(-10);a4.add(-4);a4.add(-1);a4.add(3);a4.add(8); 

     ArrayList<Integer> a5 = new ArrayList<Integer>(); 
     a5.add(17);a5.add(18);a5.add(19);a5.add(20);a5.add(21);a5.add(22);a5.add(23);a5.add(24); 

     int target = 0; 

     Vector<ArrayList<Integer>> vecOfLst = new Vector<ArrayList<Integer>>(); 
     vecOfLst.add(myList); 
     vecOfLst.add(a1); 
     vecOfLst.add(a2); 
     GlobalMembers gMem = new GlobalMembers(); 
     gMem.findtarget(target, vecOfLst, 3); 
     vecOfLst.add(a3); 
     vecOfLst.add(a4); 
     vecOfLst.add(a5); 
     gMem.findtarget(target, vecOfLst, 6); 
    } 
} catch (BiffException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

     } 
    } 
} 
+2

请发布与linenumber整个stacktrace,那里你会发现错误... – Tobias 2011-05-10 07:10:07

+0

Tobiask:行号是行47,错误是在这行代码s [i] = Integer.parseInt(单元格[ i] [j] .getContents()); – user737634 2011-05-10 08:32:42

回答

0

有一个时候

cell[i][j].getContents() 

返回一个空字符串。你应该仔细检查你的输入文件。也许通过打印你想要解析的东西来调试它。另外,请编辑您的问题,以便代码更具可读性。

+0

文森特我的输入文件有数据。只有当我试图将它转化为int时,我才面临这个问题。如果s []是一个字符串,那么没有问题。 – user737634 2011-05-10 08:30:59

+0

可以打印出来。即使它有数据,它也不是int兼容的。所以就把它打印出来。 – 2011-05-10 08:36:15

0

解析这一行

s[i]=Integer.parseInt(cell[i][j].getContents()); 

检查S [I]为空字符串或空或任何字母或特殊字符前。

如果上述字符没有找到,那么你可以解析它。

1

我认为这个问题必须是该行:

s[i]=Integer.parseInt(cell[i][j].getContents()); 

...造成的cell[i][j].getContents()是非数字(也许是空白)的返回值。

正如@Tobiask指出的那样,调试版本中的堆栈跟踪应该包括问题的确切行号,但那是我看到的唯一的parseInt

更新低于你的问题后:

那么,什么是该解决方案? N cell [i] [j] .getContents()不是空的,因为数据是存在的并且它的格式。我猜这个probelm只有在它传入int时才存在,但是不确定。

是的,例外是告诉你cell[i][j].getContents()返回的字符串有parseInt认为无效的字符。请注意,parseInt文档说:

字符串中的字符必须都是十进制数字,除非第一个字符是ASCII字符的减号'-''\u002D')来表示一个负值。

因此,例如,字符串开头处的空格无效。空白字符串无效。使用调试器浏览代码并查看字符串中的内容(来自您报告的异常,字符串似乎是空白的,但是...)。

+0

真TJ你提到的线是问题所在。线号是47.那么这是什么解决方案? N cell [i] [j] .getContents()不是空的,因为数据是存在的并且它的格式。我猜这个probelm只有在它传入int时才存在,但是不确定。 – user737634 2011-05-10 08:28:04

0

只需检查单元格[i] [j]的值是否为空或空。如果cell [i] [j]!= null或empty将值解析为int。然后处理异常。

相关问题