用于csv文件的Java line.split()返回空字符串

时间:2013-12-01 23:38:34

标签: java parsing csv

我正在尝试从这个看起来像

的CSV文件中读取
"1.23","2.45","3.25"
"4","5","6"
"7","8","9"
"10","11","12"

现在的问题是,虽然Java可以找到我的文件,但行拆分并没有返回我期望的内容。

这是我尝试从csv文件中读取的内容。

          File root = new  File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
          File resource = new File(root, "coords.csv");
          float[] x = new float[5000];
                     float[] y = new float[5000];
                     float[] z = new float[5000];
                     int coordIndex = 0; 
                     BufferedReader br = null; 
                     String line = "";
                     String cvsSplitBy = ",";
                     /* 1, 2, 3,
                      * 3, 5, 6,
                      */
                     try{
                         System.out.println(coordIndex);
                         br = new BufferedReader(new FileReader(resource));
                         String[] coordinates = line.split(cvsSplitBy);
/*I get an error from accessing an array out of bounds */ 
                         System.out.println(coordinates[0]);
                         System.out.println(coordinates[1]);
                         System.out.println(coordinates[2]);
                         x[coordIndex] = Float.parseFloat(coordinates[0]);
                         y[coordIndex] = Float.parseFloat(coordinates[1]);
                         z[coordIndex] = Float.parseFloat(coordinates[2]);
                         coordIndex++;
                     }catch (FileNotFoundException e) {
                        e.printStackTrace();
                     } catch (IOException e) {
                        e.printStackTrace();
                     } finally {
                        if (br != null) {
                            try {
                                br.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                     }

这是我的输出错误:

IOException:  java.lang.ArrayIndexOutOfBoundsException: 1

任何想法??

3 个答案:

答案 0 :(得分:1)

String line = "";
br = new BufferedReader(new FileReader(resource));
String[] coordinates = line.split(cvsSplitBy);

您的line中没有数据。

你必须添加一个循环来阅读所有内容:

while(line = br.readLine() != null) { }

答案 1 :(得分:0)

你分裂的line是空行。这导致split返回一个空数组。

你得到的错误是非防御性编程的典型错误:split()的结果完全取决于用户输入(你事先不知道),因此检查必须结果:

coords = line.split(",");
if (coords.length == 3) {
      // looks good
}
else {
  System.err.println("Bad data: " + line);
}

答案 2 :(得分:0)

line为空。您永远不会分配"" ...

以外的值