我正在创建一个从Google财经中读取一些数据的课程。这是通过我的getStockInfo方法处理的。我现在正在尝试创建两个方法来提取由getStockInfo方法创建的2D数组的某些元素,并初始化一维数组。
更具体地说,从Google财经调用的文件是CSV,我只想访问第1和第5列(0和4)。这两个类称为dataExtract和priceExtract。我编写代码时,我的IDE显示没有错误,但是当我运行类时,我得到一个nullPointerException并且我不确定为什么。我猜这与我如何将2D数组转换为一维数组有关,但却失去了原因。
另外,我是否正在将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;
}
答案 0 :(得分:0)
我设法解决了这个问题。我创建了两个文件阅读器方法,每个方法都处理2d转换。
感谢您的评论。