如何在Java中从.txt文件打印2D数组

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]); } } 

错误信息:

 ArrayIndexOutOfBounds Exception at "System.out.println(" "+data[87][2]); 

我的txt文件是:

 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]; 将创建一个大小为87和2的double [] []。

引用这些条目的索引是86和1(数组总是以索引“0”开头而不是“1”)

尝试:

  System.out.println(" "+data[86][1]); 

这应该工作!

Java中的任何数组对象都将索引设置为“n-1”。 因此,数组的边界是0和86,其中data [0] [0]为您提供第一个元素,data [86] [1]为您提供最后一个元素。

替换:

 System.out.println(" "+data[87][2]); 

附:

 System.out.println(" "+data[86][1]); 

data[87][2]确实是一个OutOfBound指数。

如果使用[87][2]实例化数组,则最后一个索引是data[86][1]因为索引范围为[0...86][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 dataList = new ArrayList(); File file = new File("/tmp/data.txt"); List 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]); } } 

正如其他人所说,你只是让你的索引错了。 除此之外,上面的代码是更清晰的做事方式,可能稍微节省一点……注意使用apache commons和内置字符串api。 在方便的位置添加字符串以进行双重转换。