【问题标题】:read csv file into 2d array将csv文件读入二维数组
【发布时间】:2014-09-13 14:21:05
【问题描述】:

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

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

【问题讨论】:

  • while (sc.hasNextLine()) 似乎毫无意义...如果文本文件中有多行,无论如何你都会用最后一行覆盖testStr
  • 你想在这里做什么?只读取特定数量的 csv 条目?读取所有 csv 条目并仅保存最新的?
  • 您检查过testStr[2*i+j] 返回的内容吗?似乎它包含kort.csv,显然其中没有要解析的双精度值。

标签: java arrays


【解决方案1】:

改成

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

您要解析文件的内容,而不是字符串“kort.csv”

【讨论】:

  • 不错的收获。正是这些小错误往往会欺骗我的头部编译器。
【解决方案2】:

完成 Alex 提到的操作后,您需要更改 testStr 的使用方式。在您当前的代码中,testStr 将始终包含最后一行元素(517.38 和 516.91)。您可能想要做的是将 Double 数字存储在 List 中,

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

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

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

最后,在 parseDouble 方法中,你应该传递你的列表,而不是传递 testStr:

mynumbers.get(index_you_want);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 2020-05-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多