0

次の形式のファイルがあります。

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

(両方とも "NaN" と等しい場合がある double の 2 列)

基本的に、両方の列を次のように分割します。

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 行 (上記のプロセスを繰り返す場所) またはファイルの最後に到達するまで、それらにデータを読み込み続けます。

したがって、最終的には、x と y のデータである double の ArrayLists の 2 つの ArrayLists が残ります。

これを行う方法が思いつかないのですが、何かアイデアはありますか?


私の問題を理解するのに役立つ場合:ファイルデータは、世界のすべての国の国境の緯度と経度のデータであり、各国は(lat、lon)=(NaN、NaN)で区切られています。親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 に答える