将csv文件读入2d数组

时间:2014-07-22 16:29:35

标签: java arrays

CSV文件:

515.30,516.81
516.81,514.27
516.74,517.68
517.54,516.72
517.61,517.64
517.22,516.99
517.21,517.33
516.99,516.92
516.96,517.5
517.38,516.91

中间没有空行。

我的计划到目前为止:

import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class CSVRead
{
    public static void main(String arg[]) throws Exception
    {
        double[][] test = new double[9][2];
        String[] testStr = new String[19];

        String delimiter = ",";

        Scanner sc = new Scanner("kort.csv");

        while (sc.hasNextLine())
        {
            String line = sc.nextLine();
            testStr = line.split(delimiter);
        }   

        for (int i=0; i<10; i++)
        {
            for (int j=0; j<2; j++)
            {
                test[i][j] = Double.parseDouble(testStr[2*i+j]);
            }
        }

        for (int y=0; y<10; y++)
        {              
            for (int x=0; x<2; x++)
            {
                System.out.print(test[y][x] +" ");
            }
        }
    } //main()
} // CSVRead

线程中的异常&#34; main&#34; java.lang.NumberFormatException:对于输入字符串:&#34; AEX2008kort.csv&#34;     at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)     在java.lang.Double.parseDouble(Double.java:540)     在CSVRead.main(CSVRead.java:26) Java结果:1

2 个答案:

答案 0 :(得分:3)

更改为

Scanner sc = new Scanner(new File("kort.csv"));

你想要解析文件的内容,而不是字符串&#34; kort.csv&#34;

答案 1 :(得分:0)

完成Alex提到的操作后,您需要更改testStr的使用方式。在当前代码中,testStr将始终具有最后一行元素(517.38和516.91)。您可能想要做的是将双号存储在列表中

List<Double> mynumbers = new ArrayList<Double> ();

稍后使用它来填充您的2D数组。将行拆分为testStr后,应将这些数字添加到列表中,

mynumbers.add(testStr[0]);
mynumbers.add(testStr[1]);

最后,在parseDouble方法中,您应该传递列表:

,而不是传递testStr
mynumbers.get(index_you_want);