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