0

我有一个格式为:

2.3 2.5
1.4 4.5
....
NaN NaN
2.2 1.4
4.6 5.6
....

(2列双打,有时都等于“NaN”)

基本上我想将两列分成:

ArrayList<Double> x;
ArrayList<Double> y;

虽然列中的两个数字都不等于“NaN”,但我想将它们添加到数组 x 和 y 中。当 BufferedReader 读取一行时:

NaN NaN

我想将 ArrayList x 和 y 添加到 allX 和 allY。

ArrayList<ArrayList<Double>> allX;
ArrayList<ArrayList<Double>> allY;

然后我想开始一个新的 ArrayList x 和 y 并继续将数据读入它们,直到我到达另一个 NaN NaN 行(我将在其中重复上述过程)或文件末尾。

所以最后我留下了 2 个 ArrayLists of ArrayLists of doubles,x 和 y 数据。

我想不出办法做到这一点,有什么想法吗?


如果它有助于理解我的问题:文件数据是世界上每个国家/地区边界的纬度和经度数据,每个国家/地区由 (lat,lon)=(NaN,NaN) 分隔。我需要将每个国家/地区的数据分成一个 ArrayList,该 ArrayList 都包含在父 ArrayList 中。

目前我有:

BufferedReader br = new BufferedReader(new FileReader(new File("file.txt")));
String line;
String[] data;
while((line=br.readLine())!=null){
    data=line.split(" "); //A String array with x and y (could be x="NaN" y="NaN")
    //How do I then process this?
}
4

1 回答 1

2

只是给你一个想法。我知道这不是世界上最好的代码,但它可以为您提供足够的信息,以便您可以继续。希望能帮助到你。代码是不言自明的,如果您发现任何困难,请告诉我。

public class MyMain1 {
    private static final String CONSTANT = "NaN";

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("/Users/Desktop/xyz.txt"));

        List<List<Double>> allX = new ArrayList<>();
        List<List<Double>> allY = new ArrayList<>();
        List<Double> x = new ArrayList<>();
        List<Double> y = new ArrayList<>();
        try {
            for (String str = null; (str = br.readLine()) != null; ) {
                String[] s = str.split(" ");
                if (CONSTANT.equals(s[0])) {
                    allX.add(x);
                    allY.add(y);
                    x = new ArrayList<>();
                    y = new ArrayList<>();
                } else {
                    x.add(Double.parseDouble(s[0]));
                    y.add(Double.parseDouble(s[1]));
                }
            }
            if (x.size() > 0 && y.size() > 0) {
                allX.add(x);
                allY.add(y);
            }
        } finally {
            br.close();
        }
    }
}
于 2013-10-19T19:38:42.833 回答