0

我正在尝试从 .txt 文件中读取数据。格式如下所示:

 ABC, John, 123
 DEF, Mark, 456
 GHI, Mary, 789

我正在尝试摆脱逗号并将数据放入数组或结构(最有可能是结构)中。

这是我用来提取每个项目的代码:

package prerequisiteChecker;

import java.util.*;
import java.io.*;

public class TestUnit {

    public static void main(String[]args){      
        try {
            FileInputStream fstream = new FileInputStream("courses.txt");
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

            while ((strLine = br.readLine()) != null) {
                String[] splitOut = strLine.split(", ");
                for (String token : splitOut)
                    System.out.println(token);
            }
            in.close();
        } catch (Exception e){
            System.err.println("Error: " + e.getMessage());
        }
    }

} 

有一次,我在“while”循环中有一条打印线,以查看项目是否会被拆分。他们是。现在我只是不知道下一步该做什么。我试图将每个分组放入一个结构中。例如:ID - ABC。名字 - 约翰。房间 - 123。

我在家里有几本关于 Java 的书,并尝试在网上四处寻找。那里有很多东西,但似乎没有一个能引导我朝着正确的方向前进。

谢谢。

迈克尔

4

3 回答 3

0

我会创建一个很好的结构来存储您的信息。我不确定您是否想如何访问数据,但这是一个很好的例子。我会离开你之前放的东西。请注意,我只公开了变量,因为它们是最终的。一旦您完成课程,它们就无法更改。如果您希望课程可变,请创建 getter 和 setter 并将实例变量更改为私有。之后,您可以使用该列表检索您想要的任何课程。

package prerequisiteChecker;

import java.util.*;
import java.io.*;

public class TestUnit {

    public static void main(String[] args) {
        try {
            FileInputStream fstream = new FileInputStream("courses.txt");
                    // use DataInputStream to read binary NOT text
            // DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;
            List<Course> courses = new LinkedList<Course>();
            while ((strLine = br.readLine()) != null) {
                String[] splitOut = strLine.split(", ");
                if (splitOut.length == 3) {
                    courses.add(new Course(splitOut[0], splitOut[1],
                            splitOut[2]));
                } else {
                    System.out.println("Invalid class: " + strLine);
                }
            }
            in.close();
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }

    public static class Course {
        public final String _id;
        public final String _name;
        public final String _room;

        public Course(String id, String name, String room) {
            _id = id;
            _name = name;
            _room = room;
        }

    }
} 
于 2013-02-02T06:03:08.347 回答
0

创建一个看起来像这样的类:

class structure {
    public String data1;
    public String data2;
    public String data3;
}

这将形成您的基本数据结构,您可以使用它来保存您在问题中提到的那种数据。现在,您可能想要遵循正确的面向对象方法,例如将所有字段声明为私有,以及编写 getter 和 setter。你可以在这里找到更多... http://java.dzone.com/articles/getter-setter-use-or-not-use-0

现在,就在您的 while 循环之外,像这样创建一个 ArrayList:ArrayList<structure> list = new ArrayList<structure>();这将用于保存您将解析的所有不同的数据行。

现在,在你的 while 循环中做这样的事情:

structure item = new structure();//create a new instance for each row in the text file.
item.data1 = splitOut[0];
item.data2 = splitOut[1];
item.data3 = splitOut[2];
list.add(item);

这基本上会将您在每一行中解析的数据放入您声明的数据结构中,方法是为每个解析的新行创建一个新实例。最后,使用list.add(item)上面所示的代码中的 ArrayList 将该数据项插入到 ArrayList 中。

于 2013-02-02T02:43:03.303 回答
0
public class File_ReaderWriter {
    private static class Structure{
        public String data;
    }

    public static void main(String[] args) throws IOException{

        String allDataString;
        FileInputStream  fileReader = new FileInputStream ("read_data_file.txt");
        DataInputStream in = new DataInputStream(fileReader);  
        BufferedReader bufferReader = new BufferedReader(new InputStreamReader(in));
        String[] arrayString = {"ID - ", " NAME - ", " ROOM - "};
        int recordNumber = 0;

        Structure[] structure = new Structure[10];

        for (int i = 0; i < 10; i++)
            structure[i] = new Structure();

        while((allDataString = bufferReader.readLine()) != null){
            String[] splitOut = allDataString.split(", ");
            structure[recordNumber].data = "";
            for (int i = 0; i < arrayString.length; i++){
                structure[recordNumber].data += arrayString[i] + splitOut[i];
            }
            recordNumber++;
        }

        bufferReader.close();

        for (int i = 0; i < recordNumber; i++){
                System.out.println(structure[i].data);

        }
    }


}

我修改了您给定的代码。有用。试试看,如果有任何疑问,请询问。

于 2016-04-15T17:47:22.937 回答