尝试将文本从文件插入到二维数组。 Java。文本格式不同

Trying to insert text from file to 2D array. Java. Text is different formats

所以我有一个文本文件,其中包含我需要读入二维数组的整数、双精度数和字符串。 Array 应该有 6 列,但在您阅读整个文件之前,这些行是未知的。我猜这是大约 700 行这是我到目前为止所拥有的。如果我删除数组,它会打印得很好,但是对于数组,我会不断出错。 我已经搜索了很多这样的问题,但它们通常只适用于 ints/doubles。也请不要推荐 arrayList,因为我们的课程中没有教过它。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class TitanicApp {


    public static void main(String[] args) throws FileNotFoundException {
       String[][] array=null;
        int i=0, j=0;
        String fileLine;
        String s;
        Scanner scannerIn=null;
        BufferedReader inputStream=null;
        try{
            inputStream = new BufferedReader(new FileReader("titanic.txt"));
            scannerIn = new Scanner(inputStream);

            while ((fileLine = inputStream.readLine()) != null){
                for (j=0;j<6;j++){

                    array [i][j]=scannerIn.next();
                    System.out.println(array[i][j]);
                    i++;
                }
            }
        }
        catch (IOException ex){
            ex.printStackTrace();
        }
    }

文件中的示例文本:

1   1   Allen, Miss. Elisabeth Walton   female  29  211.3375
1   1   Allison, Master. Hudson Trevor  male    0.9167  151.5500

输出应该是:

[ [1,   1,  Allen, Miss. Elisabeth Walton,  female, 29, 211.3375]
  [1,   1,  Allison, Master. Hudson Trevor, male,   0.9167, 151.5500]
]

我有一个包含上述信息(以及更多行)的 txt 文件,我需要将其放入一个二维数组中。由于有限制,我不得不删除一半以上。

从外观上看,您正在同时递增两个数组位置(i 和 j)。如果您希望输入在数组中按顺序递增 j 直到 array.size,然后递增 i。一个例子是嵌套的 for 循环。

for(int i = 0; i < array.size; i++){
    for(int j = 0; j < array.size; j++){
        array[i][j] = scanner.next();
        System.out.println(array[i][j]);
    }
}

或者在你的情况下,停止增加值直到 i 和 j 达到 6 而不是 array.size

我认为您需要为您的 String[][] 声明一个大小,否则您将得到 NullPointerException。据我所知,ArrayLists 是唯一动态生成列表的方法。

所以您想只使用数组来完成。您可以考虑以下示例作为参考 -

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TitanicApp {

    int size = 10;
    int colCount = 6;
    String[][] array = null;

    public static void main(String[] args) {
        TitanicApp app = new TitanicApp();
        app.startExec();
    }

    public void startExec() {

        array = new String[size][colCount];
        String fileLine;
        int i=0;

        try 
        {
            BufferedReader inputStream = new BufferedReader(new FileReader("C:/titanic.txt"));
            while ((fileLine = inputStream.readLine()) != null) {
                addTo2DArray(fileLine.split("\t"), ++i);
            }
            inputStream.close();
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }

        // Now you have the desired array : array;
    }

    public void addTo2DArray(String[] tmpArray, int minCapacity) {
        if((minCapacity > size)) {
            size = (size * 3)/2 + 1;
            String[][] newArray = new String[size][colCount];
            for(int i=0; i<array.length; i++) {
                for(int j=0; j<array[i].length; j++) {
                    newArray[i][j]=array[i][j];
                }
            }
            array = newArray;
        }
        array[minCapacity-1] = tmpArray;
    }
}

另一个解决方案:

String content = new Scanner(new File("/titanic.txt")).useDelimiter("\Z").next();
String[] rows = content.split("\n");
String[][] finalArray = new String[rows.length][];
for(int i=0; i<rows.length; i++)
{
    finalArray[i] = rows[i].split("\t");
}
//Your desired array is : finalArray;