将数据文件的内容读入内存到适当的对象数组中

时间:2013-05-28 09:43:42

标签: java string io text-files

所以我正在研究从下面的文件中读取数据并将数据存储到对象数组中,以便我可以搜索这些数组。

YEAR,FIRST,SECOND,THIRD,FOURTH,GRAND-FINAL-PLAYED,WINNING-SCORE,LOSING-SCORE,CROWD
1908,Souths,Easts,Souths,Cumberland,Y,14,12,4000 
1909,Souths,Balmain,Souths,Wests,N 
1910,Newtown,Souths,Newtown,Wests,Y,4,4,14000 
1911,Easts,Glebe,Glebe,Balmain,Y,11,8,20000
1912,Easts,Glebe,Easts,Wests,N

正如你所看到的,每年都没有参加总决赛,因此得分和人群的一些数组将留空。 我很困惑,只是似乎无法做到这一点。这是我到目前为止的代码,因为你可以看到它没有任何太闪光,所以任何帮助都是适用的。

String file ="data.txt";        

//reading   
try{
    InputStream ips=new FileInputStream(file); 
    InputStreamReader ipsr=new InputStreamReader(ips);
    BufferedReader br=new BufferedReader(ipsr);


    String line;
    while ((line=br.readLine())!=null){



        int commaIdx = 0;

        commaIdx = line.indexOf(",", commaIdx);

        int arrayIdx = 0;
        int beginIdx = 0;
        int lineNum = 1;

        String[] array1 = null;
        array1[lineNum] =" ";

        String[] array2 = null;
        array2[lineNum] =" ";

        String[] array3 = null;
        array3[lineNum] =" ";

        String[] array4 = null;
        array4[lineNum] =" ";

        String[] array5 = null;
        array5[lineNum] =" ";

        String[] array6 = null;
        array6[lineNum] =" ";

        String[] array7 = null;
        array7[lineNum] =" ";

        String[] array8 = null;
        array8[lineNum] =" ";

        String[] array9 = null;
        array9[lineNum] =" ";


            while (commaIdx > 1)
            {
                String theValue = line.substring(beginIdx, commaIdx - 1);
                switch (arrayIdx)
                {
                case 1:
                    array1[lineNum] = theValue;
                    break;
                case 2:
                    array2[lineNum] = theValue;
                    break;
                case 3:
                    array3[lineNum] = theValue;
                    break;
                case 4:
                    array4[lineNum] = theValue;
                    break;
                case 5:
                    array5[lineNum] = theValue;
                    break;
                case 6:
                    array6[lineNum] = theValue;
                    break;
                case 7:
                    array7[lineNum] = theValue;
                    break;
                case 8:
                    array8[lineNum] = theValue;
                    break;
                case 9:
                    array9[lineNum] = theValue;
                    break;
                }


        arrayIdx++;
        beginIdx = commaIdx + 1;
        commaIdx = line.indexOf(",", commaIdx+1);

    }



    lineNum++;
    }
    br.close(); 

}       
catch (Exception e){
    System.out.println(e.toString());
} 

3 个答案:

答案 0 :(得分:0)

阵列必须被包含在内!你需要事先知道它的大小:

String[] array1 = new String[size];

答案 1 :(得分:0)

使用String.split()方法,使用逗号作为分隔符。应该没有任何努力。然后检查返回数组的大小,以了解是否已经进行了总决赛。

您也可以使用StringTokenizer课程。

答案 2 :(得分:0)

String[] array1 = null;

这就是您的问题所在,您必须使用您希望它们保存的数据数量来实现数组。
如果您不知道该号码,可以使用ArrayListLinkedList

我认为你也会发现String.split(regex)方法很有用,因为你可以通过使用给定的分隔符来分割它来创建一个字符串数组,如下所示:

while ((line=br.readLine())!=null){
    String[] array = line.split(",");

最后,如果你的文件超过9行,你会遇到很多问题,因为你只使用了9个数组。你应该使用一个结构来保存你的数组,而不是命名它们:

List<String[]> listOfArray = new LinkedList();
while((line=br.readLine())!=null) {
    listOfArray.add(line.split(","));
}

这几乎可以做你想要的。要使用其中一个数组:

String[] array = listOfArray.get(IndexOfTheArray);