Google Finance からデータを読み込むクラスを作成しています。これは、getStockInfo メソッドによって処理されます。getStockInfo メソッドによって作成された 2D 配列の特定の要素を抽出し、1D 配列を初期化する 2 つのメソッドを作成しようとしています。
より具体的には、Google Finance から呼び出されるファイルは CSV であり、1 列目と 5 列目 (0 と 4) のみにアクセスしたい。これら 2 つのクラスは、dataExtract および priceExtract と呼ばれます。コードを書いているときは IDE にエラーは表示されませんが、クラスを実行すると nullPointerException が発生し、その理由がよくわかりません。2D配列を1D配列に変換する方法に関係していると思いますが、その理由はわかりません。
また、2D 配列を 1D 配列に変換する最善の手順を実行していますか? 基本的に、統計方程式を実行するために別のクラスからアクセスできる配列を作成する必要があります。
どんな助けでも大歓迎です。
編集: dateExtract および priceExtract メソッドからの null ポインター例外を取得しています。getStockInfo メソッドは完全に機能します。
EDIT 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;
}