2011-05-10 68 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。然後處理異常。

相關問題