Подведение итогов по длительности - PullRequest
0 голосов
/ 07 ноября 2019

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

Я пытался преобразовать String time в целое число, но это дает мне InputMismatchException.

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.time.Duration;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;

    public class MusicInventory {

    public long toHoursPart(Duration d) {
        return d.toHours() / 3600;
    }

    public long toMinutesPart(Duration d) {
        return d.toMinutes() % 60;
    }

    public long toSecondsPart(Duration d) {
        return d.toMillis() / 1000 % 60;

    }

    public static void process(File input, File output) throws FileNotFoundException {
        //read file
        List<String> inList = new ArrayList<>();
        try(Scanner scan = new Scanner(input)) {
            while(scan.hasNext()){
                String line = scan.nextLine();
                inList.add(line);
            }
        }



      //process data
        List<String> outList = new ArrayList<>();
        for (String now : inList) {
            try (Scanner scan = new Scanner(now)){
                scan.useDelimiter(",");
                String name = scan.next();
                String album = scan.next();
                String time = scan.nextLine();





                String next = String.format("%s | %s | %s ", name, album, time);
                outList.add(next);

            }
        }
      //write file
        try (PrintWriter pw = new PrintWriter(output)){
            for (String s : outList) {
                pw.println(s);
            }
        }
    }
}

Это должно вернуть

[Улица Сезам |Best of Elmo |0:28:11]

но возвращается

[Best of Elmo |Улица Сезам |, 2: 29,1: 30,2: 09,1: 46,1: 55,2: 02,1: 42,2: 40,1: 56,1: 30,2: 03,1: 14,2: 28,2: 47]

1 Ответ

1 голос
/ 07 ноября 2019

Вы можете рассмотреть возможность поиска и использования сторонней библиотеки для чтения вашего CSV-файла. Некоторые из них можно использовать бесплатно.

Я предполагаю, что строка в вашем CSV-файле выглядит следующим образом:

Best of Elmo,Sesame Street,2:29,1:30,2:09,1:46,1:55,2:02,1:42,2:40,1:56,1:30,2:03,1:14,2:28,2:47

То есть в строке нет кавычек инет запятых в имени или названии альбома. В этом случае должно быть легко читать и анализировать файл, используя Scanner так, как вы пытаетесь. Для сканирования времени используйте внутренний цикл, Scanner.hasNext() и Scanner.next() (не Scanner.nextLine()). Разбирать каждый раз от Scanner.next() до Duration. Это не совсем тривиально, но уже есть ответы, объясняющие, как это сделать. Я вставляю ссылку внизу. Используйте Duration.plus(Duration) для суммирования длительностей. Наконец, вам нужно отформатировать общую продолжительность обратно в строку для вывода. Для этого я включил еще одну ссылку.

Удачное кодирование.

Ссылки

...