【问题标题】:Split a file by delimiter line in Java在Java中通过分隔线分割文件
【发布时间】:2020-03-25 22:51:50
【问题描述】:

说,我有一个文件,如下所示:

---------
line11
line12
line13
---------
line21
line22
line23
line24
line25
---------
line31
line32
---------

我需要将此文件中的行列表拆分为由包含破折号的行分隔的子列表,并分别处理它们。在 Java 中有没有方便的方法来做到这一点?

【问题讨论】:

  • if (input.equals("---------")) { /* create new sublist */ }

标签: java list file io


【解决方案1】:

一种快速的方法是使用 Scanner 类。指定一个自定义的“分隔符”,它会返回大块的行。

    Scanner scanner = new Scanner(new File("file.txt"));
    scanner.useDelimiter("---------");
    while (scanner.hasNext()) {
        System.out.println("<<<<" + scanner.next() + ">>>>>");
    }

输出:

<<<<
line11
line12
line13
>>>>>
<<<<
line21
line22
line23
line24
line25
>>>>>
<<<<
line31
line32
>>>>>

【讨论】:

    【解决方案2】:

    正如@MadProgrammer 已经提到的,算法将是if (input.equals("---------")) { /* create new sublist */ }。会有一些直接的验证。如有任何疑问/问题,请随时发表评论。

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            String line;
            List<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
            List<String> sublist = new ArrayList<String>();
            int row = 1;
            try {
                Scanner reader = new Scanner(new File("file.txt"));
                while (reader.hasNextLine()) {
                    line = reader.nextLine();
                    if (line != null && row != 1 && line.equals("---------")) {
                        list.add(new ArrayList<String>(sublist));
                        sublist = new ArrayList<String>();
                    } else {
                        if (!line.equals("---------")) {
                            sublist.add(line);
                        }
                        row++;
                    }
                }
            } catch (FileNotFoundException e) {
                System.out.println("Error: unable to read file.");
            }
            System.out.println(list);
        }
    }
    

    输出:

    [[line11, line12, line13], [line21, line22, line23, line24, line25], [line31, line32]]
    

    【讨论】:

      猜你喜欢
      • 2011-12-20
      • 2016-03-21
      • 1970-01-01
      • 2012-12-01
      • 2012-07-31
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多