Разделить файл на ArrayList‹ArrayList‹Double››

У меня есть файл в виде:

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 из ArrayLists двойников, данные x и y.

Я не могу придумать, как это сделать, есть идеи?


Если это поможет понять мою проблему: данные файла — это данные широты и долготы для каждой границы страны в мире, каждая страна разделена (широта, долгота) = (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?
}

person Eduardo    schedule 19.10.2013    source источник
comment
Вы, кажется, имеете довольно четкое представление о том, что вы хотите сделать. Чтобы создать новый ArrayList, вы пишете new ArrayList(), а чтобы добавить в список массивов вы пишете list.add(thingToAdd), возможно, вы думаете, что это намного сложнее, чем есть на самом деле.   -  person Peter Lawrey    schedule 20.10.2013


Ответы (1)


Просто чтобы дать вам представление. Я знаю, что это не лучший код в мире, но он дает вам достаточно информации, чтобы вы могли продолжить. Надеюсь, поможет. Код говорит сам за себя, если вы обнаружите какие-либо трудности, пожалуйста, дайте мне знать.

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();
        }
    }
}
person Trying    schedule 19.10.2013
comment
+1 Представьте, что было бы, если бы вы вообще не ловили никаких исключений, ваш код был бы намного проще, и он делал бы то же самое. - person Peter Lawrey; 20.10.2013
comment
@PeterLawrey Я пробовал это, но подумал поставить это из-за присутствия компьютерных фанатов в SO. Спасибо, Петр, за ваш комментарий. - person Trying; 20.10.2013
comment
Я добавляю обработку исключений только тогда, когда это добавляет ценности. Если main() выдает исключение, оно все равно будет напечатано. - person Peter Lawrey; 20.10.2013
comment
Я немного подтянул его и создал два списка списков. - person Peter Lawrey; 20.10.2013