2012-02-07 18 views
1

リストには2つのExcelファイルからデータが読み込まれ、次のプログラムを実行すると50行があるときに1行しか表示されません。リストの値が複数の行に表示されない

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

文字列フィールド=(文字列)s.next(); (Object o:Collection)の代わりにIteratorを使用します。あなたの友人Yoncho – speedyGonzales

+1

私の友人にオフトピック:よくあなたのコメントは完全に適切ではありません:s.next()はすでに文字列を返します、キャストする必要はありません。さらに、String []に対してどのようなイテレータを提案しているのか、非常に興味がありますか?それだけの第三者のlibを含めるつもりですか? –

+0

OK、あなたは正しいです、私はそのような連鎖(String value:field.split( "、"))を見るのに慣れていないと思います。私は変数にfield.split( "、")をとり、サイクルのために昔ながらのものを使用します。これはあなたのコメントを突き止めるはずだった、あまりにも悪い私の人格を馬鹿として照らした:D – speedyGonzales

0

行を処理するたびに(whileブロック)、前の行を忘れて、最後の行のすべてのセルに値を配置します。以下で

0

:あなたはそれに割り当てるたびvalues

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

以前の内容は破棄されます。したがって、コードは最新の行だけを保持します。

修正するには、2D配列(行の次元と列の次元)または2Dコレクション(たとえばArrayListのArrayList)を使用する必要があります。

+0

速い応答のthnkx – user1078682

0

問題は、これらの行にあります。すべての反復values

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

が上書きされます。ループの前にlist1を宣言し、初期化するとすぐにvaluesを追加する必要があります。

関連する問題