我正在尝试使用CSVArraylist文件导入StringTokenizer:

public class Test
{
  public static void main(String [] args)
  {
    List<ImportedXls> datalist = new ArrayList<ImportedXls>();

    try
    {
      FileReader fr = new FileReader("c:\\temp.csv");
      BufferedReader br = new BufferedReader(fr);
      String stringRead = br.readLine();

      while( stringRead != null )
      {
        StringTokenizer st = new StringTokenizer(stringRead, ",");
        String docNumber = st.nextToken( );
        String note = st.nextToken( );  /** PROBLEM */
        String index = st.nextToken( ); /** PROBLEM */

        ImportedXls temp = new ImportedXls(docNumber, note, index);
        datalist.add(temp);

        // read the next line
        stringRead = br.readLine();
      }
      br.close( );
    }
    catch(IOException ioe){...}

    for (ImportedXls item : datalist) {
      System.out.println(item.getDocNumber());
    }
  }
}

我不了解nextToken的工作原理,因为如果我将初始化的三个变量(docNumbernoteindex)保留为nextToken(),它将失败:
Exception in thread "main" java.util.NoSuchElementException
    at java.util.StringTokenizer.nextToken(Unknown Source)
    at _test.Test.main(Test.java:32)

如果我仅保留docNumber,则它可以工作。你可以帮帮我吗?

最佳答案

输入文件的某些行似乎包含少于3个逗号分隔的字段。您应始终检查 token 生成器是否具有更多 token (StringTokenizer.hasMoreTokens),除非您百分百确定输入正确。

正确解析CSV文件并不是一件容易的事。为什么不使用可以很好地完成工作的库http://opencsv.sourceforge.net/

10-08 13:00