0

我正面临这个运行时错误**"Exception in thread "main" java.lang.NumberFormatException: For input string: "" "**请帮助我克服这个问题。

这是代码片段:

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();
}  

        }
    }
}
4

4 回答 4

1

我认为问题一定出在这一行:

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

...由cell[i][j].getContents()非数字的返回值(可能为空白)引起。

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

在您提出以下问题后更新:

那么解决这个问题的方法是什么??N cell[i][j].getContents() 不是空的,因为数据存在并且它的羽化。我猜这个问题只有在它转换成 int 时才存在,但是我不确定。

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

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

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

于 2011-05-10T07:13:20.893 回答
0

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

于 2011-05-10T07:26:51.897 回答
0

有一段时间

cell[i][j].getContents()

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

于 2011-05-10T07:11:34.793 回答
0

在解析这一行之前

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

检查s[i]是否有空字符串或 null 或任何字母或特殊字符。

如果找不到上述字符,则可以对其进行解析。

于 2011-05-10T07:11:38.420 回答