Определить конец строки в файле - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь прочитать файл txt и отобразить элементы файла. Я хочу отображать элементы в одной строке, чтобы дать один разрыв строки. Но, дайте дополнительную новую строку, когда начинается новая строка в файле. Файл txt:

Межзвездный% Кристофер Нолан% 2014% PG-13

Начало% Кристофер Нолан% 2010% PG-13

Конец игры% Русские братья% 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.

Я запутался с этой строкой в ​​файле. Любое предложение ценится !!! Также обратите внимание, что меня не смущает синтаксическая ошибка. Но с логикой c и тем, как выполняется процесс чтения файлов.

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

Я использовал функцию 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();
}
1 голос
/ 08 апреля 2020

Проблема в том, что разрыв строки не рассматривается как разделитель, поэтому четвертый токен читается как PG-13<NEWLINE>Inception - с разрывом строки, встроенным внутрь. Возможны следующие варианты:

Добавить разрыв строки в качестве возможного разделителя:

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

Или добавить% в конце каждой строки во входном файле:

Межзвездный% Кристофер Нолан% 2014% PG-13%
Начало% Кристофер Нолан% 2010% PG-13%

Или измените способ чтения файла на построчное чтение и разбиение на % (см. Ответы других)

1 голос
/ 08 апреля 2020

Вы можете попробовать прочитать строку, а затем разбить ее

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();
...