检测文件中的行尾

Detect the end of line in file

我正在尝试读取 txt 文件并显示文件元素。我想在同一行中显示元素以给出一个换行符。但是,当文件中的新行开始时,给出额外的新行。 txt 文件是:

Interstellar % Christopher Nolan % 2014 % PG-13

Inception % Christopher Nolan % 2010 % PG-13

Endgame % Russo Brothers % 2019 % PG-13

这里,%是分隔符。到目前为止我做了什么:

File file_path = new File("film.txt");
try {
    Scanner file_input = new Scanner(file_path);
    file_input.useDelimiter("%");
    for(new_book=1; file_input.hasNext(); new_book++) {
        String book_item = file_input.next().trim();
        System.out.println(book_item);
        if(new_book%4==0){
            System.out.println();
        }
    }
    file_input.close();
} 
catch (FileNotFoundException e) {
    System.out.println("File not found");
}

它给出了什么:

Interstellar 
Christopher Nolan
2014
PG-13
Inception 

Christopher Nolan
2010
PG-13
Endgame 
Russo Brothers

2019 
PG-13

我想要的是:

Interstellar 
Christopher Nolan
2014
PG-13

Inception 
Christopher Nolan
2010
PG-13

我注意到,在行尾索引不起作用,即如果我打印 new_book 那么,new_book 值不会显示在第一个和第二个 PG-13 中, 但显示在最后 PG-13.

我对文件中的这一行感到困惑。每一个建议表示赞赏!另外,请注意,我不会混淆语法错误。但是,有了逻辑以及文件读取过程是如何完成的。

你可以尝试读行再拆分

file_input = new Scanner(file);
while(file_input.hasNextLine()){
    String st = file_input.nextLine();
    String[] s = st.split("%");
    if(s.length > 1)
        System.out.println(s[0] + "\n" + s[1] + "\n" + s[2] + "\n" + s[3] + "\n");
}
file_input.close();

我使用 scanner.nextLine() 函数一次读取整行。然后我用 String.split("%") 将行字符串拆分为一个字符串列表。最后,我在输出之前对每个字符串使用 String.trim() 以删除前导和尾随空格。

File file_path = new File("film.txt");
try {
    Scanner file_input = new Scanner(file_path);
    while(file_input.hasNextLine()){
        String line = file_input.nextLine();
        String[] items = line.split("%");

        for(String item: items)
            System.out.println(item.trim());

        System.out.println();

    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

问题是换行符不被视为定界符,因此第 4 个标记被读取为 PG-13<NEWLINE>Inception - 其中嵌入了换行符。您的选择是:

添加换行符作为可能的分隔符:

Scanner file_input = new Scanner(file_path);
file_input.useDelimiter("%|\n");

或者在输入文件的每一行末尾添加 %:

Interstellar % Christopher Nolan % 2014 % PG-13 %
Inception % Christopher Nolan % 2010 % PG-13 %

或者将文件读取方式更改为逐行读取并在 % 上拆分(请参阅其他人的答案)