【发布时间】:2016-02-25 03:31:03
【问题描述】:
我在一个聚合实验室工作,基本上我遇到的问题是,在我的 txt 文件中,文本文件的第一行显示一个人和他们的信息,接下来的两行显示他们的动物信息。我能够为这个人制作一个对象,但是当我尝试将下一行发送到动物对象时,我不断收到 java.util.noSuchElementsExceptions 错误,我不知道为什么。有人可以帮帮我吗。
文本文件如下所示:
Morely,Robert,123 Anywhere Street,15396,4,234.56,2
布巴,斗牛犬,58,4-15-2010,6-14-2011
露西,斗牛犬,49,4-15-2010,6-14-2011
Wilder,John,457 Somewhere Road,78214,3,124.53,1
拉尔夫,猫,12,01-16-2011,04-21-2012
Person p;
Animal a;
int number;
String line;
Scanner fileInput = new Scanner (new File("C://clientdata.txt"));
String animal;
int j;
j = 0;
String []Person =new String[j];
while (fileInput.hasNext())
{
StringTokenizer st = new StringTokenizer(fileInput.nextLine(), ",");
p = new Person();
p.setFirstName (st.nextToken());
p.setLastName(st.nextToken());
p.setAddress(st.nextToken());
p.setClientID(Integer.parseInt(st.nextToken()));
p.setVisits(Integer.parseInt(st.nextToken()));
p.setBalance(Double.parseDouble(st.nextToken()));
p.setNumPets(Integer.parseInt(st.nextToken()));
number = p.getNumPets();
System.out.println(number);
for(int i =0; i < number; i++)
{
fileInput.nextLine();
a = new Animal();
a.setName(st.nextToken());
a.setType(st.nextToken());
a.setWeight(Integer.parseInt(st.nextToken()));
a.setDate(st.nextToken());
a.setLastVisit(st.nextToken());
}
}
}
【问题讨论】:
-
你调用
fileInput.nextLine()并忽略返回值,然后继续调用st.nextToken(),但是第一行没有留下任何标记。不要使用Scanner来读取文件,使用BufferedReader。不要使用StringTokenizer解析行,使用split()。来自 javadoc:"StringTokenizer是一个遗留类,出于兼容性原因保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人使用String的split方法或 @改为 987654331@ 包。” -
我们的老师告诉我们这样输入文本文件,不要使用缓冲阅读器。在这一点上我很困惑,因为我想做的只是让扫描仪读取下一行,以便下一行的信息可以输入到动物类或对象中。
标签: java aggregation