0

いくつかのオブジェクトのメンバーを埋める必要がありますが、それらがいくつあるかわかりません。そのため、動的サイズのために ArrayList を使用しています。しかし、これらのオブジェクトを ArrayList に入力する方法がわかりません。ファイルから 1 行ずつ読み取っていて、一致するパターンが見つかった場合は、新しいオブジェクトを作成してデータを入力する必要があります。

//read data from file to BufferedReader, that we can read out single line by line
BufferedReader mBufferedReader = new BufferedReader(new FileReader(mFile));
String line;

while ((line = mBufferedReader.readLine()) != null) {
    //pattern "name" for searching points
    Pattern pattern = Pattern.compile("\"(.*?)\"");
    //array of delimited Strings separated with comma 
    String[] delimitedStrings = line.split(",");

    //if we find "name" of point, get code, lat and lon of that point
    Matcher matcher = pattern.matcher(line);

    if (matcher.find()) {
        String name = delimitedStrings[0];
        mData.add(new myData().name = name);
        String code = delimitedStrings[1];
        mData.add(new myData().code = code);

    }
}

myData クラスには、メンバー String name、String code などがあります。add メソッドでこのようなものが必要ですが、うまくいきません。ありがとう!

4

3 に答える 3

2

少し漠然としていますが、おそらくこれを意味していました

if (matcher.find()) {
    String name = delimitedStrings[0];
    String code = delimitedStrings[1];

    mTaskData.add(new MyData(name, code));                    
}

MyDataクラスには次のように定義されたコンストラクターがあります

public class MyData {

    private String name;
    private String code;

    public MyData (String name, String code) {
        this.name = name;
        this.code = code;
    }

    // getters/setters()
}

また、 はPattern変更されないため、ファイル リーダー ループから移動する必要があります。

// compile the pattern just once (outside the loop)
Pattern pattern = Pattern.compile("\"(.*?)\"");

while ((line = mBufferedReader.readLine()) != null) {
于 2013-07-16T07:07:17.343 に答える
2

これはコンパイルされません:

if (matcher.find()) {
    String name = delimitedStrings[0];
    mTaskData.add(new myData().name = name);                

    String code = delimitedStrings[1];
    mTaskData.add(new myData().code = code);                    

}

次のようになります。

if (matcher.find()) {
    String name = delimitedStrings[0];
    myData md = new myData();
    md.name = name; // or use setter like md.setName(name)
    mTaskData.add(md);                

    String code = delimitedStrings[1];
    md.code = code;
    mTaskData.add(md);                    

}
于 2013-07-16T07:06:16.910 に答える
1
List<mData> mData = new ArrayList<>();

mData.add(new mData(code));

パラメーター文字列コードを使用して mData でコンストラクターを作成する

于 2013-07-16T07:08:20.320 に答える