0

我正在创建一个从 Google Finance 读取一些数据的类。这是通过我的 getStockInfo 方法处理的。我现在正在尝试创建两种方法来提取由 getStockInfo 方法创建的 2D 数组的某些元素,并初始化 1D 数组。

更具体地说,从 Google Finance 调用的文件是 CSV,我只想访问第 1 列和第 5 列(0 和 4)。这两个类称为 dataExtract 和 priceExtract。当我编写代码时,我的 IDE 没有显示任何错误,但是当我运行该类时,我得到一个 nullPointerException,我不确定为什么。我猜这与我如何将二维数组转换为一维数组有关,但不知道为什么。

另外,我是否正在将 2D 数组转换为 1D 数组的最佳程序?本质上,我需要创建一个可以被另一个类访问的数组来执行一些统计方程。

任何帮助将不胜感激。

编辑:我从 dateExtract 和 priceExtract 方法中得到空指针异常。getStockInfo 方法完美运行。

编辑 2:发生错误时引用语句“date = dataArray[0]”和“String [] priceString = dataArray[4]”。

public synchronized String[][] getStockInfo(final String symbol, final String stockExhange) {
    BufferedReader br = null;
    String line = " ";
    String splitBy = ",";
    ArrayList<String[]> googleData = new ArrayList<String[]>( );
    try {
        URL googleFin = new URL("http://www.google.co.uk/finance/historical?q=" 
                                    + stockExhange + "%3A" 
                                    + symbol + "&ei=l-d4UvCSM7SAwAOsxwE&output=csv");
        URLConnection gf = googleFin.openConnection();
        br = new BufferedReader(new InputStreamReader(gf.getInputStream()));
        while ((line = br.readLine()) != null) {
            googleData.add(line.split(splitBy));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    int size = googleData.size(); //The number of elements in the data ArrayList
    String[][] dataArray = new String[5][size]; //The 6 elements are for each column of the CSV Google Finance produces
    int i;
    for (i = 0; i < 5; i++) {
        int j;
        for (j = 0; j < size; j++) {
            dataArray[i][j]=googleData.get(j)[i];//Turn into 2D Array rather than ArrayList and transpose
            System.out.println(dataArray[i][j]);
        }
    }
    return dataArray; 
}    

public String[] dateExtract(String[][] dataArray) {
    String[] date;
    date = dataArray[0];
    for (int i = 0; i < dataArray.length; i++) {
        System.out.println(date[i]);
    }
    return date;
}

public double[] priceExtract(String[][] dataArray) {
    String[] priceString = dataArray[4];
    double[] priceDouble = new double[priceString.length];
    for (int i = 0; i < dataArray.length; i++) {
        priceDouble[i] = Double.parseDouble(priceString[i]);
    }
    for (int i = 0; i < dataArray.length; i++) {
        System.out.println(priceDouble[i]);
    }
    return priceDouble;
}
4

1 回答 1

0

我设法解决了这个问题。我创建了两个文件阅读器方法,每个都处理 2d 转换。

感谢您的意见。

于 2013-11-05T18:58:37.580 回答