首页 > 解决方案 > 读取多行并将其拆分为单独的字符串

问题描述

我希望你一切都好。目前,我正在为 Java 的一个学校项目而苦苦挣扎。我们必须创建“流媒体/娱乐服务”,让主持人能够“主持节目”,但实际上并未实施。我已经做到了,以便“节目”的主持人可以填写有关节目的所有必要信息并将其写入文件。为了向“观众”展示即将到来的节目,我需要从同一个文件中读取它并将所有行组合为一个字符串。我的数据集目前为

Title
Genre
Entertainment type
Date and time
Length of show
Price of show (if any)
"-"

我在每个“节目”的末尾都做了“-”以便能够对此进行拆分,但我似乎对此没有任何运气。数据集的片段将是:

Show #1
Stream
Review
2020-10-10T10:00
90
0.0
-
Show#2
Stream
Review
2020-10-10T10:00
90
0.0

我想做什么:

public class ShowHandler{
private String[] shows;
public void readShows(){
BufferedReader bufferedReader = new BufferedReader(new FileReader("Shows.txt"));
String line;
while((line = bufferedReader.readLine()) != null){
//split the read lines when the "-" occurs
//add these to each place in an array/list
    }
  }
}

while 循环中的两条注释是我认为可以解决问题的方法,但不知何故我无法做到这一点。任何聪明和有经验的头脑可以帮助我吗?

此致。

标签: java

解决方案


出现“-”时拆分读取行

不要拆分行,-因为每条记录也有一个日期字段,其中包含-. 您可以使用 的实例List<List<String>>来存储每条记录,其中每条记录都可以是 的实例List<String>

读取每一行并放入 aList<String>中,一旦 a-出现,将其复制到实例List<List<String>>并重置List<String>以收集下一条记录的行。

演示:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        // Test
        readShows().forEach(System.out::println);
    }

    static List<List<String>> readShows() throws IOException {
        List<List<String>> listOfLists = new ArrayList<>();
        BufferedReader bufferedReader = new BufferedReader(new FileReader("Shows.txt"));
        String line;
        List<String> list = new ArrayList<>();
        while ((line = bufferedReader.readLine()) != null) {
            // Transfer the data from `list` to `listOfLists` and create a new list as soon
            // as `-` occurs
            if (line.equals("-")) {
                listOfLists.add(list);
                list = new ArrayList<>();
            } else {
                list.add(line);
            }
        }
        // Add the last record
        listOfLists.add(list);

        bufferedReader.close();
        return listOfLists;
    }
}

输出:

[Show #1, Stream, Review, 2020-10-10T10:00, 90, 0.0]
[Show#2, Stream, Review, 2020-10-10T10:00, 90, 0.0]

推荐阅读