我正在尝试使用基本的 Scanner 对象在 Java 中解析一个巨大的 tsv 文件(其中包含列表格式的 imdb 数据)。当我在解析时到达某个元素时,尽管原始文件似乎没有任何问题,但我收到“索引越界异常”。 这是我运行来获取数据的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String filePath = "G:/TSV/data.tsv";
List<BasicsObject> basicsObjectsList = new ArrayList<>();
try {
Scanner scanner = new Scanner(new File(filePath));
scanner.useDelimiter("\t");
String first = scanner.nextLine();
Integer i = 0;
while(scanner.hasNextLine()) {
i++;
String line = scanner.nextLine();
String[] fields = line.split("\t");
if(fields.length < 7) {
System.out.println(fields[0] + "\t" + fields[1] + "\t" + fields[2] + "\t" + fields[3] + "\t" + fields[4] + "\t" + fields[5] + "\t");
}
if (!"\\N".equals(fields[5]) && !"\\N".equals(fields[6])) {
BasicsObject basicsObject = new BasicsObject(
fields[0],
Integer.valueOf(fields[5]),
Integer.valueOf(fields[6])
);
System.out.println(basicsObject.toString());
basicsObjectsList.add(basicsObject);
} else if (!"\\N".equals(fields[5]) && "\\N".equals(fields[6])) {
BasicsObject basicsObject = new BasicsObject(
fields[0],
Integer.valueOf(fields[5]),
0
);
System.out.println(basicsObject.toString());
basicsObjectsList.add(basicsObject);
} else if ("\\N".equals(fields[5]) && !"\\N".equals(fields[6])) {
BasicsObject basicsObject = new BasicsObject(
fields[0],
0,
Integer.valueOf(fields[6])
);
System.out.println(basicsObject.toString());
basicsObjectsList.add(basicsObject);
} else {
BasicsObject basicsObject = new BasicsObject(
fields[0],
0,
0
);
System.out.println(basicsObject.toString());
basicsObjectsList.add(basicsObject);
}
}
System.out.println(i);
scanner.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println(basicsObjectsList.size());
}
}
为了打开该文件,我必须使用名为 LFTViewer5u 的专用程序,但我可以确认文件中的数据似乎没有损坏。以下是我遇到的问题的部分相关数据:
tt0000669 short Cupid's Pranks Cupid's Pranks 0 1908 \N 10 Comedy,Fantasy,Short
tt0000670 short El curioso impertinente El curioso impertinente 0 1908 \N 12 Short
tt0000671 short Desdemona Desdemona 0 1908 \N \N Drama,Short
这是我的程序的输出,其中包含有问题的行和错误:
BasicsObject{tconst='tt0000669', startYear=1908, endYear=0}
tt0000670 short El curioso impertinente El curioso impertinente 0 1908
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 6
at Main.main(Main.java:29)
我的旧 Eclipse IDE 在读取 TSV 文件时似乎出现了问题。我已经下载了 Intellij 并运行了给我带来错误的相同代码,但它运行完美。除了这个我不知道还能说什么。