在java中为文本文件创建二维数组?

时间:2015-06-24 00:50:24

标签: java arrays text

我必须导入包含单词和整数的文本文件,然后使用二维数组维护数据。我似乎无法弄清楚如何制作这个数组。我可以使用的唯一导入是Scanner,File和FileNotFoundException。以下是我的代码片段:

public static void DisplayInventory() throws FileNotFoundException
{

    try
    {
        Scanner autoInventory = new Scanner(new File("records.txt"));

        for (int Num = 0; Num < 15; Num++)
        {
            String autoRecords = autoInventory.nextLine();
            autoRecords = autoRecords.replace(';', ' ');
            System.out.println(autoRecords);

        }

    }
    catch (FileNotFoundException except)
    {
        System.out.println("Error: Inventory read failure. Error " +
            except.getMessage());
        System.exit(-1);

    }

}

如您所见,这不显示数组。我不确定如何做到这一点,并已经在这几天了。我是java的新手,这是一个任务。我感谢您给予的任何帮助。

2 个答案:

答案 0 :(得分:1)

我将做一些假设(可能不准确)。第一个是你的文件看起来像这样(一个包含14行和7列的csv):

a1,b1,c1,d1,e1,f1,g1
a2,b2,c2,d2,e2,f2,g2
a3,b3,c3,d3,e3,f3,g3
a4,b4,c4,d4,e4,f4,g4
..

下一个假设是您的文件包含String类型的值。在我们做任何事情之前,我们需要声明2D数组:

int numRecords = 14;
int numColumns = 7;
String[][] records = new String[numRecords][numColumns];

您发布的代码试图从扫描仪中读取15行,在;上进行替换(不确定是什么),然后打印该行。这是一个好的开始 - 这个循环负责读取每一行。我还会添加一个额外的条件来检查是否确实存在下一行(使用hasNextLine)。

for (int i = 0; i < numRecords && autoInventory.hasNextLine(); i++)
{
    String rowData = autoInventory.nextLine();
    String[] colData = rowData.split(",");

    for (int j=0; j<colData.length && j<numColumns; j++)
    {
        records[i][j] = colData[j];
    }
}

在这个外部循环中,我们首先使用rowData收集nextLine。接下来,我们使用split(String上的函数)将行拆分为多个部分(由,分隔),将这些部分存储在一维数组中。我们声明了循环colData的第二个循环(内循环) - 对于我们检查的每个值,我们将它放在records数组中的适当位置。

现在该文件已被读入数组,您可以以类似的方式将其打印到屏幕上。使用外部循环(i)迭代行,使用内部循环(j)迭代列,打印出每个records[i][j]

for (int i=0; i<numRecords; i++) 
{
    for (int j=0; j<numColumns; j++) 
    {
        System.out.print(records[i][j]);

                                    // extra stuff..
        if (j != numColumns-1) {    // print commas between items if we want
            System.out.print(", ");
        }
    }
    System.out.println("");  // print out a newline after each row
}

答案 1 :(得分:0)

我并不完全清楚你想要做什么或为什么你需要一个二维数组,但这里是如何创建一个数组和一个二维数组,以及如何向它们添加数据带有for循环。但是,我认为你不需要二维数组。

public static void DisplayInventory() throws FileNotFoundException
{
String[] sArray = new String[15]; //I'm assuming there are 15 values being added
String[][] sArray2 = new String[10][10]; //Not sure how many are being added
//Remember, make sure you don't use less space than you need.

    try
    {
        Scanner autoInventory = new Scanner(new File("records.txt"));

        for (int Num = 0; Num < 15; Num++)
        {
            String autoRecords = autoInventory.nextLine();
            autoRecords = autoRecords.replace(';', ' ');
            sArray[Num] = autoRecords;
            System.out.println(sArray[Num]);
        }

我认为这应该足够了,因为我不相信你需要一个二维数组;看起来你正在尝试做的事情可以使用常规数组进行管理。话虽这么说,我仍然不完全清楚你要做什么,所以如果你真的需要使用二维数组,只需添加另一个for循环,当使用数组时,你将可能(不一定)需要保持第一个for循环的值在第一个括号内,并嵌套在第二个 - 如下:

sArray2[Num][Num2];