Java, текстовый файл Read From содержит разные разделители - PullRequest
0 голосов
/ 04 июня 2018

У меня есть текстовый файл, содержащий разные разделители, после каждого разделителя (например: #, # *, # @, # o) есть определенное значение, Как я могу прочитать каждое значение отдельно и добавить все значения в один объект?

пример текстового файла:

#index 1
#* Book Review: Discover Linux
#@ Marjorie Richardson
#o -
#t 1998
#c Linux Journal

Что я пробовал:

public void ReadFile (String fileName) throws IOException {
    File file = new File(fileName);
    BufferedReader br = new BufferedReader(new FileReader(file));
    List<Book> books = new ArrayList<>();
    String fileRead = br.readLine();
    while (fileRead != null) {
        if (fileRead.startsWith("#")) {
            String index = fileRead;
            Book b = new Book();
            b.AddBook(index);
            books.add(b);
        }
    }
}

1 Ответ

0 голосов
/ 04 июня 2018

Одним из простых решений было бы создание карты символов с соответствующим установщиком в классе Book:

private static final Map<Character, BiConsumer<Book, String>> CODE_TO_SETTER =
    new HashMap<>();

static
{
    CODE_TO_SETTER.put('*', Book::setTitle);
    CODE_TO_SETTER.put('@', Book::setAuthor);
    // plus any others you want
}

Затем, пока вы перебираете строки, каждый раз создавайте новую книгу#index и вызывайте установщик в текущей книге для каждой строки, начинающейся с символа хеша:

Book book = null;
while (fileRead != null) {
    if (fileRead.startsWith("#index"))
    {
        if (book != null) // we're finished with the current book
        {
            books.add(book);
        }
        book = new Book();
    }
    else if (fileRead.startsWith("#"))
    {
        CODE_TO_SETTER.get(fileRead.charAt(1)).accept(book, fileRead.substring(3));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...