Прочитайте, а затем разбейте текстовый файл на разные массивы - PullRequest
0 голосов
/ 01 мая 2020

Так что я пытаюсь использовать BufferedReader для разделения текстового файла на 2 разных массива, я написал некоторый код, но я не уверен, где отсюда go.

Я знаю, как заполнить массив, но я просто не могу получить указанные строки c.

Итак, один массив для NEW_OFFICE, содержащий только цифры, и один для MAIN_ADDRESS, содержащий только цифры под ним.

BufferedReader in = null;
try {
    in = new BufferedReader(new FileReader("myDelivery.txt"));
    String read = null;
    while ((read = in.readLine()) != null) {
        String words = read.split("NEW_OFFICE")[0];
    }
} catch (IOException e) {
    System.out.println("There was a problem: " + e);
    e.printStackTrace();
} finally {
    try {
        in.close();
    } catch (Exception ignored) { }
}

Это текстовый файл:

NEW_OFFICE
-92.48392883    52.96531732
-2.483984994    92.48392883
MAIN_ADDRESS
-1.207614869    52.98908196

Ответы [ 3 ]

0 голосов
/ 01 мая 2020

NEW_OFFICE всегда является первой строкой и всегда имеет две строки ниже, то же самое относится и к MAIN_ADDRESS, у него всегда есть одна строка ниже. NEW_OFFICE & MAIN_ADDRESS не может появляться более одного раза.

На основе вашего комментария, упомянутого выше, ниже приводится решение:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        String[][] office = new String[2][2];
        String[][] main = new String[1][2];
        try (BufferedReader in = new BufferedReader(new FileReader("myDelivery.txt"))) {
            String read;
            while ((read = in.readLine()) != null) {
                if (read.equalsIgnoreCase("NEW_OFFICE")) {
                    // Read next two lines
                    for (int i = 0; i < 2; i++) {
                        if ((read = in.readLine()) != null) {
                            office[i] = read.split("\\s+");
                        }
                    }
                } else if (read.equalsIgnoreCase("MAIN_ADDRESS")) {
                    // Read next line
                    if ((read = in.readLine()) != null) {
                        main[0] = read.split("\\s+");
                    }
                }
            }
        }
        // Display office[][]
        System.out.println("Displaying office:");
        for (String[] officeData : office) {
            System.out.println(Arrays.toString(officeData));
        }

        // Display main[][]
        System.out.println("Displaying main:");
        for (String[] mainData : main) {
            System.out.println(Arrays.toString(mainData));
        }
    }
}

Вывод:

Displaying office:
[-92.48392883, 52.96531732]
[-2.483984994, 92.48392883]
Displaying main:
[-1.207614869, 52.98908196]

Примечания:

  1. \\s+ предназначен для разбиения строки на пробелы.
  2. Использование Синтаксис try-with-resources для упрощения кода.
0 голосов
/ 01 мая 2020

Я бы go с чем-то вроде этого. Помните, что у меня сейчас нет IDE, так что это в основном псевдокод:

    try (BufferedReader in = new BufferedReader(new FileReader("x.txt"))) {
    String line = null;
    boolean isOffice = false;
    ArrayList<double> officeInts = new ArrayList<double>();
    ArrayList<double> addressInts = new ArrayList<double>();
    while ((line = in.readLine()) != null) {
        if (line.contains("NEW_OFFICE")) {
            isOffice = true;
            continue;
        } else if (line.contains("MAIN_ADDRESS")) {
            isOffice = false;
            continue;
        }

        for(String s : line.split("    "){
            double num = Double.parseDouble(s);
            if(isOffice) {
                officeInts.add(num);
            } else {
                addressInts.add(num);
            }
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}
0 голосов
/ 01 мая 2020

.split() принимает строку, но это должно быть регулярное выражение, а не подстрока, на которую вы хотите разбить ее. Вы хотите изменить свой код следующим образом:

try (BufferedReader in = new BufferedReader(new FileReader("x.txt"))) {
    String read;
    String office = "";
    while ((read = in.readLine()) != null) {
        if (read.contains("NEW_OFFICE")) {
            office = "NEW_OFFICE";
        } else if (read.contains("MAIN_ADDRESS")) {
            office = "MAIN_ADDRESS";
        } else {
            System.out.println(office + " : " + read);
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

Я также изменил ваш try на try-with-resources, поэтому вам не нужно беспокоиться о закрытии ресурса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...