当前位置: 首页 > 知识库问答 >
问题:

如何将文件读入特定格式

单于淇
2023-03-14
[Todays date]  Some text
some more text
even more text
[A different date]  Some text 
[Another different date]  More text
Final text block
[Todays date] some text some more text even more text
[A different date] some text
[Another different date] More text Final text block

如果这一行文本没有以方括号开头,我想把这一行连接到上面的一行。我可以读它在正常使用这个代码。我试着用String.StartsWith但是我搞不懂。

    List<String> testList = new ArrayList<String>();
    
    BufferedReader br = new BufferedReader(new FileReader("SystemOut.log"));
    String line = br.readLine();
    while (line!=null) {
        testList.add(line);
        line=br.readLine();
    }
    br.close();

我正在寻找对此方法的更改,以使它以我想要的格式读取它,或者可能是一个将作用于我的列表 并对此问题排序的方法。谢谢

共有1个答案

丰飞龙
2023-03-14

一个更好的解决方案(第三次尝试),它(希望)能更好地处理大文件,避免将整个文件读入缓冲区:

    public static void main(String[] args) throws IOException {
        String input = "[04/06/2021]  Some text\n" +
                "some more text\n" +
                "even more text\n" +
                "[01/01/2020]  Some text \n" +
                "[31/12/2020]  More text\n" +
                "Final text block";


        List<String> testList = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new StringReader(input))) {
            br.lines().forEach(
                    line -> {
                        if (testList.isEmpty() || line.startsWith("[")) {
                            testList.add(line + " ");
                        } else {
                            testList.set(
                                    testList.size() - 1,
                                    testList.get(testList.size() - 1) + line + " ");
                        }
                    }
            );
        }
        testList.forEach(System.out::println);
    }

我想出了这个繁琐的方法:

    public static void main(String[] args) throws IOException {
        String input = "[04/06/2021]  Some text\n" +
                "some more text\n" +
                "even more text\n" +
                "[01/01/2020]  Some text \n" +
                "[31/12/2020]  More text\n" +
                "Final text block";

        List<String> testList = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new StringReader(input))) {
            String nextLine = br.readLine();
            StringBuilder currentLine = new StringBuilder(nextLine + " ");
            while (nextLine != null) {
                nextLine = br.readLine();
                if (nextLine != null) {
                    if (nextLine.startsWith("[")) {
                        testList.add(currentLine.toString());
                        currentLine = new StringBuilder();
                    }
                currentLine.append(nextLine).append(" ");
                }
            }
            if (currentLine.length() > 0) {
                testList.add(currentLine.toString());
            }
        }
        testList.forEach(System.out::println);
    }

如果您可以远离您的循环,那么更好/更简单的方法是:

    public static void main(String[] args) throws IOException {
        String input = "[04/06/2021]  Some text\n" +
                "some more text\n" +
                "even more text\n" +
                "[01/01/2020]  Some text \n" +
                "[31/12/2020]  More text\n" +
                "Final text block";

        List<String> testList = new ArrayList<>();

        String[] inputs = input.split("\\n");
        StringBuilder currentLine = new StringBuilder(inputs[0] + " ");
        for (int i = 1; i < inputs.length; i++) {
            if (inputs[i].startsWith("[")) {
                testList.add(currentLine.toString());
                currentLine = new StringBuilder();
            }
            currentLine.append(inputs[i]).append(" ");
        }
        testList.add(currentLine.toString());
        testList.forEach(System.out::println);
    }

[04/06/2021]  Some text some more text even more text 
[01/01/2020]  Some text  
[31/12/2020]  More text Final text block 
 类似资料:
  • 问题内容: 如何在不设置集群计算基础架构(例如Hadoop或Spark)的情况下,将大小适中的Parquet数据集读取到内存中的Pandas DataFrame中?我只想在笔记本电脑上使用简单的Python脚本在内存中读取这些数据,但是数量很少。数据不驻留在HDFS上。它位于本地文件系统上,也可能位于S3中。我不想启动并配置其他服务,例如Hadoop,Hive或Spark。 我以为Blaze /

  • 如何在不设置集群计算基础设施(如Hadoop或Spark)的情况下将大小适中的Parket数据集读取到内存中的Pandas DataFrame中?这只是我想在笔记本电脑上使用简单的Python脚本在内存中读取的适度数据。数据不驻留在HDFS上。它要么在本地文件系统上,要么可能在S3中。我不想启动和配置其他服务,如Hadoop、Hive或Spark。 我原以为Blaze/Odo会使这成为可能:Odo

  • 问题内容: 例如,我有一个页面,我需要包括Google Map 库,并仅包含一个专门用于此页面的 .js 文件 (例如location.js) 。 我想在这行之后注入这两个文件 是否有可能做到这一点? 注意:我使用的是Sails.js v0.10 问题答案: Sails 在其视图渲染中使用,因此您可以使用块来完成所需的操作。 在您的文件中,在下方添加(例如): 然后在您要提供服务的视图中,使用您的

  • 我有一个包含5个字段(列)的csv文件。在5列中,我只想读第二列和第四列,这是进一步处理所需的。现在我正在使用opencsv api的readAll()方法进行读取。通过使用这种方法,我必须处理所有列,以获得第二列和第四列的值。 有没有办法读取所需列的值,即从csv文件中读取第二个和第四个值? 这是正确的方法还是我应该使用其他方法?

  • 我想用GSON库用java读这个JSON文件。我刚开始使用gson Libray。有人请纠正我的代码我的JSON文件如下所示: 这是我为读取这个文件而编写的java代码: 但我得到以下异常:

  • 我有一个这样的文本文件: 如何将其读入地图或Erlang中的任何其他数据结构(以进一步迭代每个键及其各自的值)并最终打印地图?