JAVA8, синтаксический анализ текстового файла и анализ его значений для объектов - PullRequest
0 голосов
/ 04 октября 2018

У меня есть конкретный текстовый файл, который выглядит следующим образом:

name: meeting_name1
description: 
04/18/2012 00:00:00
05/18/2012 00:00:00
... (more dates)
07/18/2012 00:00:00
name: meeting_name2
description: some_desc
04/18/2012 00:00:00
05/18/2012 00:00:00
... (more dates)
07/18/2012 00:00:00
(etc)

У меня есть Java-объект, который выглядит следующим образом:

class Meeting {
    String name;
    String description;
    List<Date> dates;
}

Моя цель - прочитать файл, разобрать значения, создатьобъекты и сохранить их в базу данных.

Я могу прочитать файл построчно и преобразовать его в List<String>, т.е.все данные вместе.`Я могу создать и заполнить один Java-объект значениями и сохранить его в базе данных.

Моя проблема здесь в том, как узнать, что я нахожусь в конце дат, и начинаются строки (name: meeting_name2) нового объекта.

Таким образом, я мог бы сделать что-то вроде List<List<String>>, где List<String> будет равен одному объекту, т.е.List<Meeting>?

Не уверен, что это понятно, извините за форматирование.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Предположение, что вы можете прочитать данные файла в переменную List.(См. Ответ выше)

List<String> lines = Files.readAllLines(Paths.get("FILE_NAME"));

Теперь вы можете увидеть код ниже в качестве демонстрации.Это простой цикл и, если не сказать, утверждение.Надеюсь, это поможет вам.

public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        List<String> data = new ArrayList<>();
        data.add("name: meeting_name1");
        data.add("description: some_desc");
        data.add("07/18/2012 00:00:00");
        data.add("07/18/2012 00:00:00");
        data.add("name: meeting_name2");
        data.add("description: some_desc");
        data.add("07/18/2012 00:00:00");

        List<Meeting> result = new ArrayList<>();
        Meeting temp = null;
        for (String line : data) {
            if (line.startsWith("name:")) {
                temp = new Meeting(line.split(":")[1].trim());
                result.add(temp);
            } else if (line.startsWith("description:")) {
                temp.setDescription(line.split(":")[1].trim());
            } else {
                temp.getDates().add(simpleDateFormat.parse(line)); // Use date for
            }
        }
        System.out.println(result.get(0).getName() + ": " + result.get(0).getDates().size()); // meeting_name1: 2
        System.out.println(result.get(1).getName() + ": " + result.get(1).getDates().size()); // meeting_name2: 1    
    }

    static class Meeting {
        String name;
        String description;
        List<Date> dates;

        public String getName() {
            return name;
        }

        public List<Date> getDates() {
            return dates;
        }

        Meeting(String name) {
            this.name = name;
            this.dates = new ArrayList<>();
        }

        public void setDescription(String description) {
            this.description = description;
        }
    }
0 голосов
/ 04 октября 2018

Одна возможность - сначала прочитать все строки.Вам не нужно беспокоиться об окончании строк с помощью:

List<String> lines = Files.readAllLines(Paths.get("FILE_NAME"));

, а затем перебирать массив, если строка начинается с «name:», вы создаете новый объект и добавляете такие данные:

        List<Meeting> meetings = new ArrayList();
        Meeting currentMeeting;

        for (String line : lines) {
            if(line.startsWith("name:"))
            {
                currentMeeting = new Meeting();
                meetings.add(currentMeeting);
                //...add data (name)
            }
            //...add more data (description and dates)
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...