import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class csvimport5 {
public static void main(String[] args) throws IOException {
double [][] data = new double [87][2];
File file = new File("buydata.txt");
int row = 0;
int col = 0;
BufferedReader bufRdr = new BufferedReader(new FileReader(file));
String line = null;
//read each line of text file
while((line = bufRdr.readLine()) != null && row < data.length)
{
StringTokenizer st = new StringTokenizer(line,",");
while (st.hasMoreTokens())
{
//get next token and store it in the array
data[row][col] = Double.parseDouble(st.nextToken());
col++;
}
col = 0;
row++;
}
System.out.println(" "+data[87][2]);
}
}
Error message:
ArrayIndexOutOfBounds Exception at "System.out.println(" "+data[87][2]);
My txt file is:
8.00,28.00
18.00,28.00
8.00,23.00
12.00,20.00
15.00,30.00
12.00,32.00
12.00,20.00
18.00,31.00
29.00,25.00
6.00,28.00
7.00,28.00
6.00,24.00
14.00,30.00
11.00,23.00
12.00,20.00
31.00,24.00
11.00,20.00
17.00,23.00
14.00,32.00
15.00,23.00
8.00,20.00
17.00,31.00
7.00,20.00
12.00,23.00
15.00,20.00
12.00,20.00
21.00,20.00
27.00,27.00
18.00,20.00
25.00,27.00
46.00,13.00
26.00,10.00
47.00,22.00
44.00,14.00
34.00,4.00
34.00,4.00
44.00,7.00
39.00,5.00
20.00,0.00
43.00,11.00
43.00,25.00
34.00,2.00
25.00,10.00
50.00,9.00
25.00,9.00
39.00,2.00
34.00,7.00
44.00,15.00
36.00,3.00
40.00,5.00
49.00,21.00
42.00,7.00
35.00,1.00
30.00,2.00
31.00,13.00
53.00,12.00
40.00,4.00
26.00,4.00
50.00,55.00
57.00,51.00
62.00,52.00
开发者_运维百科56.00,52.00
59.00,40.00
61.00,68.00
66.00,49.00
57.00,49.00
62.00,58.00
47.00,58.00
53.00,40.00
60.00,54.00
55.00,48.00
56.00,65.00
67.00,56.00
55.00,43.00
52.00,49.00
67.00,62.00
68.00,61.00
65.00,58.00
46.00,53.00
46.00,49.00
47.00,40.00
64.00,22.00
64.00,54.00
63.00,64.00
63.00,56.00
64.00,44.00
63.00,40.00
double [][] data = new double [87][2];
will create a double[][] with size 87 and 2.
The index to reference these entries would be 86 and 1 (an Array always starts with index "0" and not "1")
try:
System.out.println(" "+data[86][1]);
That should work!
Any array object in Java have indexes as "n-1". So, the bounds of your array is 0 and 86, where data[0][0] gives you the first element, and data[86][1] gives you the last element.
Replace :
System.out.println(" "+data[87][2]);
With:
System.out.println(" "+data[86][1]);
data[87][2]
is indeed an OutOfBound Index.
If you instance your array with [87][2]
your last index is data[86][1]
as your indexes range from [0...86]
and [0...1]
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
public class CSVReader {
public static void main(String[] args) throws IOException {
List<String[]> dataList = new ArrayList();
File file = new File("/tmp/data.txt");
List<String> lines = FileUtils.readLines(file, "UTF-8");
for (String line : lines) {
dataList.add(line.split(","));
}
String[] val = dataList.get(dataList.size() - 1);
System.out.println("" + val[0] + " " + val[1]);
}
}
As others have indicated you simply got your indexes wrong. Apart from that, the code above is a clearer way of doing things, maybe slightly less save... Note the use of apache commons and the build-in string api. Add your string to double conversion at a convenient place.
精彩评论