ArrayList
.csv ファイルから取得したトークンから Java で を作成する際に問題が発生しました。私は何時間もそれを理解しようとしてきましたが、成功しませんでした。を作成しないとArrayList
、すべてのトークンが問題なく出力されますがArrayList
、それらを追加するために を作成すると問題が発生します。60 以上の行と各行に 9 つのトークン (文字列) で構成される .csv ファイルの場合、に追加する前に私が持っているものを出力しますArrayList
が、ArrayList を作成してそれらにトークンを追加した後、最初のいくつかしか出力できません。に遭遇する前にトークンNoSuchElementException
。
これはすべて私のコードです:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.StringTokenizer;
import java.lang.String;
import java.util.ArrayList;
import java.util.*; //probably redundant
import java.util.Scanner;
public class TTcompiler18Feb {
private static ArrayList<String> list;
public static void main(String[] args) {
try
{
//csv file containing data
String strFile = "FileWithTokens.csv";
//create BufferedReader to read csv file
BufferedReader br = new BufferedReader( new FileReader(strFile));
String strLine = "";
StringTokenizer st = null;
int lineNumber = 0, tokenNumber = 0;
list = new ArrayList<String>();
String token;
//read comma separated file line by line
while( (strLine = br.readLine()) != null)
{
lineNumber++;
st = new StringTokenizer(strLine, ",");
while(st.hasMoreTokens())
{
tokenNumber++;
System.out.println("Line # " +
lineNumber + ", Token # " +
tokenNumber + ", Token : "+
st.nextToken());
list.add(st.nextToken());
}
//reset token number
tokenNumber = 0;
}
System.out.println("The size of your list is: " + list.size());
}
catch(Exception e)
{
System.out.println("Exception while reading csv file: " + e);
}
}
}
コードを実行すると、次のようになります。
TTcompiler18Feb を実行
Line # 1, Token # 1, Token : Row1Token1
Line # 1, Token # 2, Token : Row1Token2
Line # 1, Token # 3, Token : Row1Token3
Line # 1, Token # 4, Token : Row1Token4
Line # 1, Token # 5, Token : Row1Token5
Exception while reading csv file: java.util.NoSuchElementException
以外の方法でリストに追加しようとしましたlist.add(st.nextToken());
。たとえば、メソッドを使用したり.toString
、型キャストst.nextToken()
したり、変数を に割り当てたりしますst.nextToken()
。次のようにします。
token = st.nextToken().toString(); //defined as string type outside loop
list.add(token);
...しかし、これらのアプローチはどれも機能していないようです。
このプログラムの目的は、受信した .csv ファイル内のすべてのトークンを取得し、ArrayList
後で使用できるようにそれらを適切に配置することです。私はまだJavaにかなり慣れていないので、この問題を解決する上でジェネリックがどのような役割を果たすかについてはまだ不明です. 私が理解しているように、StringTokenizer
タイプは「文字列」ですが<String>
、トークンを でArrayList
構成された に入力するために a を使用する必要があります<Strings>
が、方法がわかりません。ヘルプ/ヒント/フィードバックは大歓迎です!!!