将TSV文件转换为2d数组 - java

时间:2013-12-23 12:55:30

标签: java

我有一个包含3行数据的tsv txt文件。

看起来像:

HG  sn  FA  
PC  2   16:0
PI  1   18:0
PS  3   20:0
PE  2   24:0
        26:0
        16:1
        18:2

我想把这个文件读成java中的二维数组。

但无论我尝试什么,我都会一直出错。

File file = new File("table.txt");
        Scanner scanner = new Scanner(file);
        final int maxLines = 100;
        String[][] resultArray = new String[maxLines][];
        int linesCounter = 0;
        while (scanner.hasNextLine() && linesCounter < maxLines) {
            resultArray[linesCounter] = scanner.nextLine().split("\t");
            linesCounter++;
        }

        System.out.print(resultArray[1][1]);

我一直收到此错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at exercise.exercise2.main(exercise2.java:31)

第31行是

 System.out.print(resultArray[1][1]);

我找不到任何原因导致此错误不断出现

1 个答案:

答案 0 :(得分:2)

在你的情况下,我会使用Java 7 Files.readAllLines

类似的东西:

String[][] resultArray;

List<String> lines = Files.readAllLines(Paths.get("table.txt"), StandardCharsets.UTF_8);

//lines.removeAll(Arrays.asList("", null)); // <- remove empty lines

resultArray = new String[lines.size()][]; 

for(int i =0; i<lines.size(); i++){
  resultArray[i] = lines.get(i).split("\t"); //tab-separated
}

输出:

[[HG, sn  FA  ], [PC, 2, 16:0], [PI, 1, 18:0], [PS, 3, 20:0], [PE, 2, 24:0], [, , 26:0], [, , 16:1], [, , 18:2]]

这是文件(按edit并抓取内容,应按标签分隔):

HG sn FA
PC 2 16:0 PI 1 18:0 PS 3 20:0 PE 2 24:0         26:0         16:1         18:2

<强> [编辑]

获取16:1

System.out.println(root[6][2]);