我一直在使用從.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