gpt4 book ai didi

java - 按顺序从文件中读取一组数字

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:25 24 4
gpt4 key购买 nike

我正在尝试按顺序从文件中读取数字,但文件中的第一个数字存在问题,请阅读问题末尾的示例。

public static ArrayList<String> ArraylineLengths() {
ArrayList<String> Lines = new ArrayList<String>();
String file = "tra.srt";
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));

String line;
while((line = br.readLine()) != null) {
line = line.trim();
if(isInteger(line)) {
int i = Integer.parseInt(line);
if(i > 0) {
Lines.add(line);
System.out.println(line);
}
}
}

} catch(IOException ioe) {
ioe.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
} catch(IOException e) {
// do nothing
}
}
}
return (Lines);

}


public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException e) {
return false;
}
// only got here if we didn't return false
return true;
}

}

输入文件:

1
00:01:09,069 --> 00:01:11,446
All right now.
Y'all fresh veggies.

2
00:01:11,571 --> 00:01:13,239
Y'all gonna be in a chopped salad.

3
00:01:13,573 --> 00:01:16,409
Very simple. I want you to take your knife.

我应该得到的是数字1 2 3等等,但我得到的是:

2 3 4 5...etc.

这是因为如果我使用substring(1,2),文件顶部的第一个数字会正常工作,但由于此中的一个老问题,我不能link .

用HXD读取文件后:

EF BB BF 31 0D 0A 30 30 3A 30 30 3A 30 31 2C 36 30 30 20 2D 2D 3E 20

30 30 20 2D 2D 3E 20 30 30 3A 30 30 3A 30 34 2C

最佳答案

将输入复制粘贴到文件中后,我尝试了您的代码,它运行得很好。

所以,我认为你在文件的开头有一个不可见的字符,我认为它可能是 BOM .

您可以做的是使用十六进制编辑器查看文件的开头,并找出有问题的字符。

这是我在输入文件上执行此操作时得到的结果:

$ hexdump -C /tmp/tra.srt | head
00000000 31 0a 30 30 3a 30 31 3a 30 39 2c 30 36 39 20 2d |1.00:01:09,069 -|

如您所见,文件以 0x31 开头,即字符 1,并以 0x0a 继续,即 1>\n。如果文件开头有 BOM,它将以 0xef 0xbb 0xbf 开头。

如果你确实有BOM,可以看看this question查看如何跳过它,或者您可以在修剪该行后添加以下代码:

if (line.startsWith("\uFEFF"))
line = line.substring(1);

关于java - 按顺序从文件中读取一组数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com