当我通过的文本符合格式时,我无法弄清楚为什么会收到 DateTimeParseException 错误。以下是导致问题的代码:
LocalTime lt = LocalTime.parse(songTime,
DateTimeFormatter.ofPattern("k:m:s"));
这是奇怪的事情。每当我查询用户一段时间(让我们以 00:02:30 为例),它完全按照我的意愿运行。但是当我使用我的方法(从文本文件中提取时间)时,它会给出错误:
线程“主”java.time.format.DateTimeParseException 中的异常:无法解析文本“00:02:30”,在索引 8 处找到未解析的文本
我假设的第一件事是,它可能会带来额外的空白或类似的东西。因此,为了检查这一点,我在变量的每一侧打印了 3 行,它打印了这个:
---00:02:30---
正如您在上面看到的,没有空格。如果我对 00:02:30 进行硬编码,那么它也可以完美运行。然后我遇到了另一个困扰我的事情。我的文本文件如下所示:
00:00:00 First
00:02:30 Second
第一次完美通过,但之后的任何人都会导致错误。它们都有完全相同的格式,两边都没有空格,所以我看不到问题所在。我检查了有关该问题的每一个论坛帖子,其中大多数是使用错误格式、错误字符串等的个人。我不确定这里的情况是否如此,因为当我对其进行硬编码或查询用户输入时它可以完美运行。
以下是我在 Formatter 中选择的每个选项的含义(来自文档):
k clock-hour-of-am-pm (1-24)
m minute-of-hour
s second-of-minute
这是读取文件的方法:
public static ArrayList<Song> scanInSongs () {
ArrayList<Song> songArray = new ArrayList<Song>();
try {
BufferedReader reader = new BufferedReader(new FileReader("Description.txt"));
String line;
while ((line = reader.readLine()) != null) {
String key = line.substring(0, line.indexOf(' '));
System.out.println("Fetched timestamp: "+ key);
String value = line.substring(line.indexOf(' ') + 1);
System.out.println("Fetched name: "+ value);
Song song = new Song(value, "", key);
songArray.add(song);
}
} catch (IOException e) {
System.out.println("File not found, exception: "+ e);
}
return songArray;
}
歌曲类:
public class Song {
private String duration = "";
private String name = "";
private String timestampFromVideo = "";
public Song(String name, String timestampFromVideo, String duration) {
if (name == "") {
this.name = "";
} else {
this.name = name;
}
this.duration = duration;
this.timestampFromVideo = timestampFromVideo;
}
public String getName() {
return this.name;
}
public String getDuration() {
return this.duration;
}
public String getTimestampFromVideo() {
return this.timestampFromVideo;
}
public void setDuration(String duration) {
this.duration = duration;
}
}
主要的:
public static void main(String[] args) {
ArrayList<Song> songArray = scanInSongs();
String songTime = songArray.get(0).getDuration();
LocalTime lt = LocalTime.parse(songTime,
DateTimeFormatter.ofPattern("k:m:s"));
}
最后如前所述是文件:
00:00:00 First
00:02:30 Second
提前感谢大家的帮助!