csv 尝试在Java中解析大型TSV文件时出现奇怪错误[关闭]

rdrgkggo  于 11个月前  发布在  Java
关注(0)|答案(1)|浏览(99)

**已关闭。**此问题需要debugging details。目前不接受答案。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
4天前关闭。
Improve this question
我尝试使用基本的Scanner对象在Java中解析一个巨大的tsv文件(其中包含来自imdb的列表格式的数据)。当我在解析时到达某个元素时,我得到了一个“Index out of bounds exception”,尽管原始文件似乎没有任何问题。下面是我运行以获取数据的代码:

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)


下面是空白检测器的结果:

hgncfbus

hgncfbus1#

看起来我的旧Eclipse IDE在阅读TSV文件时有bug。我已经下载了Intellij并运行了同样的代码,这些代码给了我错误,它运行得很顺利。我不知道还能说什么,但那。

相关问题