0

我必须填充一些对象的成员,但我不知道它们有多少。这就是我使用 ArrayList 的原因,因为它是动态大小的。但我不知道如何在 ArrayList 中填充这些对象。我从文件中逐行读取,如果找到匹配模式,我必须创建新对象并用数据填充它。

//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 类有成员字符串名称,例如字符串代码。我需要使用 add 方法的类似的东西,但这不起作用。谢谢!

4

3 回答 3

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 回答
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 回答
1
List<mData> mData = new ArrayList<>();

mData.add(new mData(code));

使用参数字符串代码在 mData 中创建构造函数

于 2013-07-16T07:08:20.320 回答