我正在创建一个从 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;
}