有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

列表在Java中按分隔符行拆分文件

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

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

我需要将这个文件中的行列表拆分为子列表,子列表由包含破折号的行分隔,并分别处理它们。在Java中有什么简便的方法可以做到这一点吗


共 (2) 个答案

  1. # 1 楼答案

    正如@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]]
    
  2. # 2 楼答案

    一种快速的方法是使用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
    >>>>>