2012-02-07 63 views
1

列表不顯示更多的記錄>我從2個Excel文件中讀取數據,當我運行follwing程序時,它顯示只有1行,當有50行時。列表值不顯示更多行

Scanner s= new Scanner(fil); // reading from file 
String array1[]=new String[50]; 
s.next(); s.next(); s.next(); s.next(); 
int i=0; 
String[] values= new String[55]; 
while(s.hasNext()) 
{ 
    String field=s.next(); 
    values=field.split(","); 
} 
List<String> list1=new ArrayList<String>(); 

for(String x:values) 
{ 
    list1.add(x); 
} 
System.out.println(list1); 

回答

2

while (s.hasNext())循環覆蓋values陣列的每一行,所以只能從最後一排的值被添加到列表中。嘗試在while循環內移動for循環,以便添加每行。

3

有應該是一個合適的理由: 你重複的行掃描儀的所有權利,但你更換值陣列中的每個迭代。因此,最終只會得到值的最後一行。

你可能會那樣做:

List<String> values = new ArrayList(); 
while(s.hasNext()) 
{ 
    String field=s.next(); 
    for (String value : field.split(",")) { 
    values.add(value); 
    } 
} 
+0

更好使用String field =(String)s.next();我會用Iterator而不是for(Object o:Collection)。你的朋友Yoncho – speedyGonzales 2012-02-07 08:48:36

+1

我的朋友的話題:你的評論不完全相關和正確:s.next()已經返回一個字符串,不需要轉換。此外,我非常感興趣的是看看通過String []提出什麼樣的迭代器?你打算只包含一個完整的第三方庫嗎? – 2012-02-07 08:56:01

+0

好吧,你是對的,我想我不習慣看到這樣的鏈接(字符串值:field.split(「,」)),我需要更多的咖啡。我會把field.split(「,」)放在一個變量中,並使用老式的循環。這應該是戳你評論,太糟糕了,它點燃了我的個性作爲一個白癡:D – speedyGonzales 2012-02-07 09:04:14

0

您保存到值的最後一排的單元格的列表。

每次處理一行(while塊)。將所有最後一行的單元格放入值中,忘記前一行。

0

在下面:只要你分配給它

while(s.hasNext()) 
{ 
    String field=s.next(); 
    values=field.split(","); // <--- overwrites previous line's fields 
} 

values以前的內容將被丟棄。因此,您的代碼只保留最近的行。要修復,您需要使用二維數組(一維用於行,一列用於維)或二維集合(例如ArrayLists的ArrayList)。

+0

thnkx爲快速反應 – user1078682 2012-02-07 08:26:03

0

的問題是在這些線路:

String[] values= new String[55]; 
while(s.hasNext()) 
{ 
    String field=s.next(); 
    values=field.split(","); 
} 

在每次迭代values被覆蓋。您應該在循環前聲明list1,並在初始化後立即添加values