Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用持续时间总结时间_Java_Duration_Inputmismatchexception - Fatal编程技术网

Java 使用持续时间总结时间

Java 使用持续时间总结时间,java,duration,inputmismatchexception,Java,Duration,Inputmismatchexception,对于我的项目,我必须读入CSV文件中提供给我们的数据,并以特定格式写出。我几乎完成了,但我的问题是我的程序没有完全阅读给出的时间。从这里开始,我的程序只是在阅读所有给我的时间 我试图将字符串时间转换为整数,但它给了我一个输入不匹配异常 import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.time.Duration;

对于我的项目,我必须读入CSV文件中提供给我们的数据,并以特定格式写出。我几乎完成了,但我的问题是我的程序没有完全阅读给出的时间。从这里开始,我的程序只是在阅读所有给我的时间

我试图将
字符串时间
转换为整数,但它给了我一个
输入不匹配异常

    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);
            }
        }
    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.PrintWriter;
导入java.time.Duration;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共级音乐档案馆{
公共长时间服务部分(持续时间d){
返回d.toHours()/3600;
}
公共长时间到分钟部分(持续时间d){
返回d.toMinutes()%60;
}
公共长到秒部分(持续时间d){
返回d.toMillis()/1000%60;
}
公共静态无效进程(文件输入、文件输出)引发FileNotFoundException{
//读取文件
列表inList=new ArrayList();
尝试(扫描仪扫描=新扫描仪(输入)){
while(scan.hasNext()){
String line=scan.nextLine();
inList.add(行);
}
}
//过程数据
列表大纲列表=新的ArrayList();
for(现在字符串:inList){
尝试(扫描仪扫描=新扫描仪(现在)){
scan.useDelimiter(“,”);
字符串名称=scan.next();
String album=scan.next();
字符串时间=scan.nextLine();
String next=String.format(“%s |%s |%s”,名称、相册、时间);
outList.add(下一步);
}
}
//写入文件
try(PrintWriter pw=新的PrintWriter(输出)){
用于(字符串s:大纲视图){
pw.println(s);
}
}
}
}
这应该会回来

[芝麻街|埃尔莫之最| 0:28:11]

但它又回来了

[最佳埃尔莫芝麻街,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]


您可以考虑找到并使用第三方库来读取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.plus(Duration)
汇总持续时间。最后,您需要将总持续时间重新格式化为字符串以供输出。我包括另一个链接

快乐编码

链接

欢迎使用堆栈溢出。如果不能,至少需要使其可复制,这意味着包括原始CSV文件的外观。从你的帖子到现在,我们都猜不出哪里出了问题。