我一直在使用从.csv文件获取的令牌在Java中创建ArrayList
时遇到问题。我一直试图找出几个小时没有成功。如果不创建ArrayList
,我所有的令牌都可以毫无问题地打印出来,但是当我创建一个ArrayList
来添加它们时,我遇到了麻烦。对于每行包含60多行和9个标记(字符串)的.csv文件,我在添加到ArrayList
之前打印出我拥有的内容,但在创建ArrayList并向它们添加标记之后,我只能打印出第一个在碰到一个NoSuchElementException
之前几个令牌。将.csv文件中的令牌添加到Java中的ArrayList中
这是我的所有代码:
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
方法,t ypecasting st.nextToken()
,并st.nextToken()
为变量赋值,就像这样:
token = st.nextToken().toString(); //defined as string type outside loop
list.add(token);
...但这些方法都没有似乎工作。
该程序的目标是获取传入的.csv文件中的所有标记,并将它们整齐地放入ArrayList
以供稍后使用。我对Java仍然很陌生,对于泛型如何在解决这个问题中起作用仍然不清楚。据我了解,StringTokenizer
是'string'类型,但我需要使用一个<String>
将我的令牌输入到由<Strings>
组成的ArrayList
,但不知道如何。任何帮助/提示/反馈非常感谢!
我不能相信我错过了。感谢大家! – spacetree 2012-02-20 06:00:14