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