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」ループに印刷行がありました。彼らはいた。今、私は次に何をすべきか途方に暮れています。各グループを 1 つの構造に配置しようとしています。例: ID - ABC。名 - ジョン。ルーム - 123。

私は家に Java に関する本を何冊か持っていて、Web を調べてみました。そこにはたくさんありますが、どれも私を正しい方向に導くようには見えませんでした.

ありがとう。

マイケル

4

3 に答える 3

0

次のようなクラスを作成します。

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

これにより、質問で言及した種類のデータを保持するために使用できる基本的なデータ構造が形成されます。ここで、すべてのフィールドをプライベートとして宣言し、ゲッターとセッターを記述するなど、適切なオブジェクト指向の方法に従うことをお勧めします。ここで詳細を見つけることができます... 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 に挿入します。

于 2013-02-02T02:43:03.303 に答える
0

あなたの情報を保存するための素晴らしい構造を作成します。どのようにデータにアクセスしたいかはわかりませんが、ここに良い例があります。私はあなたが以前に置いたものから離れます。変数は最終的なものであるため、変数のみを公開したことに注意してください。コースを作成すると変更できません。コースを変更可能にする場合は、ゲッターとセッターを作成し、インスタンス変数をプライベートに変更します。その後、リストを使用して、必要なコースを取得できます。

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 に答える