将csv文件读取到数组

时间:2017-04-19 22:12:51

标签: java

我正在研究TSP问题而且我要阅读我国家城市的xy坐标,但是当我尝试这样做时,我遇到了一个超出界限的数组,我想把x坐标放到数组中和y坐标到另一个,任何想法,谢谢。 包tsp;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class tsp {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String [] arr = new String[4000000];
        String fileName = "EG - Copy1.csv";
        File file = new File(fileName);
        try {
            @SuppressWarnings("resource")
            Scanner inputStream = new Scanner(file);
            while(true){
                String xcoord = inputStream.next();
                arr = xcoord.split(",");
                double op = Double.parseDouble(arr[0]);
                double opy = Double.parseDouble(arr[1]);
                System.out.println(op+"****"+opy);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

2 个答案:

答案 0 :(得分:0)

如果语句xcoord.split(",")未找到逗号,则返回一个元素的数组。

当您尝试从arr[1]读取时,后者会使数组超出范围异常。

顺便说一下,你分配一个如此大的阵列是没有价值的:

String [] arr = new String[4000000];

因为语句xcoord.split(",")每次都会重新分配给arr一个新数组。

答案 1 :(得分:0)

您的文件中有一行格式不正确。您可以按照以下方式更改代码,以仅处理格式良好的行。

        try {
            @SuppressWarnings("resource")
            Scanner sc = new Scanner(file);
            String [] arr;
            while(sc.hasNextLine()){
                String xcoord = inputStream.nextLine();
                arr = xcoord.split(",");
                if (arr.length == 2) {
                   double op = Double.parseDouble(arr[0]);
                   double opy = Double.parseDouble(arr[1]);
                   System.out.println(op+"****"+opy);
                }
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }