Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将字符串数组列表拆分为自定义模型_Java_Arrays - Fatal编程技术网

在Java中将字符串数组列表拆分为自定义模型

在Java中将字符串数组列表拆分为自定义模型,java,arrays,Java,Arrays,我似乎陷入了困境。我从一个网站上获取数据,并将其拆分为文本文件,每个文本文件包含一个姓名、电子邮件和电话 我已设法将所有文本文件读入一个列表。每个字符串[]数组包含姓名、电子邮件和电话。我可以从列表索引中识别原始页码 现在我正在尝试创建一个人,然后创建一个人物列表。Person类是 public class Person { private int pageNum; private String name; private String email; privat

我似乎陷入了困境。我从一个网站上获取数据,并将其拆分为文本文件,每个文本文件包含一个姓名、电子邮件和电话

我已设法将所有文本文件读入一个列表。每个字符串[]数组包含姓名、电子邮件和电话。我可以从列表索引中识别原始页码

现在我正在尝试创建一个人,然后创建一个人物列表。Person类是

public class Person {
    private int pageNum;
    private String name;
    private String email;
    private String cell;
}
此代码块执行相关的添加到列表

private List<String[]> peopleRaw = new ArrayList<String[]>();
List<People> people = new ArrayList<People>();

/*
 * read in the people from all the files and store each persons details
 * in an array. then add each array to a list of arrays
 */
for (int i = 0; i < NUM_PAGES; i++) {
    String fileName = "people/" + i + ".txt";
    String[] _lines = Utils.getLinesFromFile(getBaseContext(), fileName);

    peopleRaw.add(_lines);
}

for (int j = 0; j < peopleRaw.size(); j++) {
    List<String> lines = new ArrayList<String>();

    for (int k = 0; k < peopleRaw.get(j).length; k++) {
        lines.add(peopleRaw.get(j)[k]);
    }

    for (int l = 0; l < lines.size(); l += 3) {
        String _nm = lines.get(l);
        String _email = lines.get(l + 1);
        String _cell = lines.get(l + 2);
        Person _prsn = new Person(j, _nm, _email, _cell);

        people.add(_prsn);

        lines.clear();
    }
}
private List peopleRaw=new ArrayList();
List people=new ArrayList();
/*
*从所有文件中读取人员,并存储每个人员的详细信息
*在一个数组中。然后将每个数组添加到数组列表中
*/
对于(int i=0;i
我得到的索引超出了String _email=line.get(l+1)的界限

我曾想过采用sql方式创建一个小型数据库,但我认为这只会带来问题。必须将文件拆分为自定义模型


我不得不承认我有点不知所措,现在我对自己的项目感到困惑。请有人帮忙。

首先,您需要对代码进行一些重构,以便您自己理解您所写的内容:

切勿使用局部变量
l
,因为我不清楚
l+1是什么

关于这个问题-可能是因为您可能有4行代码,而不是您预期的
mod 3


传入数据中的某些内容被破坏了

通过在其中添加解析方法,可以使Person类更智能。现在,唯一知道如何创建一个
人的人就是他自己。不过,您可以将其移动到实用程序类,使其看起来更干净,污染更少

您所需要做的就是读取文本文件,并将这些行输入到解析方法中,以创建
Person
对象

import java.text.ParseException;

public class Person {
    private int pageNum;
    private String name;
    private String email;
    private String cell;

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getCell() {
        return cell;
    }

    public void setCell(String cell) {
        this.cell = cell;
    }

    public Person() {
        this(0, "", "", "");
    }

    public Person(int pageNum, String name, String email, String cell) {
        this.pageNum = pageNum;
        this.name = name;
        this.email = email;
        this.cell = cell;
    }

    @Override
    public String toString() {
        return String.format("Person [pageNum=%s, name=%s, email=%s, cell=%s]", pageNum, name, email, cell);
    }

    public static void main(String[] args) {
        String data = "1,John Doe,john@doe.org,555-555-5555";

        try {
            Person johnDoe = Person.parse(data, ",");
            System.out.println(johnDoe);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    public static Person parse(String input, String delimiter) throws ParseException {
        Person result = new Person();
        String[] tokens = input.split(delimiter);

        if (tokens.length != 4) {
            throw new ParseException(String.format("Malformed Person input: %s%n", input), 0);
        }

        result.setPageNum(Integer.parseInt(tokens[0], 10));
        result.setName(tokens[1]);
        result.setEmail(tokens[2]);
        result.setCell(tokens[3]);

        return result;
    }
}

我已经设法做到了。我不知道这是不是很老套,还是最好的解决方法:

List<String[]> peopleRaw = new ArrayList<String[]>();

List<Person> people = new ArrayList<Person>();

for (int i = 0; i < NUM_PAGES; i++) {
        String fileName = "people/" + i + ".txt";

        String[] _lines = Utils.getLinesFromFile(getBaseContext(), fileName);

        peopleRaw.add(_lines);

    }

    for (int j = 0; j < peopleRaw.size(); j++) {

        for (int k = 0; k + 2 < peopleRaw.get(j).length; k += 3) {
            Person prsn = new Person(j, peopleRaw.get(j)[k], peopleRaw.get(j)[k + 1],
                    peopleRaw.get(j)[k + 2]);

            people.add(prod);
        }
    }

    for (int i = 0; i < people.size(); i++) {
        Log.v("People", people.get(i).toString());
    }
List peopleRaw=new ArrayList();
List people=new ArrayList();
对于(int i=0;i

我想我可以通过清空peopleRaw列表来释放一些内存,或者GC为我这样做,但它现在正在工作。

你有
for(int l=0;l
所以在某个时候
l
将在最后一行,但你尝试用'lines.get(l+1);`和'line.get(l+2);'我猜这是你看到的错误的原因。使循环更快地停止?也许可以将for循环条件更改为如下内容:
l
什么是
List
,您的意思是
List
??非常肯定,您必须共享解析方法
Utils.getLinesFromFile()
,因为我们不知道您的文件是什么样子。@polywhill先生,getLinesFromFile()方法工作正常。我能够打开所有96个文件,并将数据解析为一个列表。问题是迭代列表和每个字符串[],获取元素0、1和2,然后移动到3、4和5(如果存在),等等。我喜欢这个类的结构。我肯定会使用部分代码,但它似乎没有解决我的问题。我拥有的数据是一个字符串数组列表,我面临一个挑战,选择每3个数组元素,并从每个数组创建一个人将摆脱int l变量。我很确定我需要一个循环中的一个循环。我在C#中也做过类似的工作,迭代了一组集合,但java的foreach循环本身就让我头疼。