我正在尝试解析固定宽度格式的文件,从中提取x,y值,然后将它们存储在Vector中的int[]
数组中。
文本文件如下所示:
0006 0015
0125 0047
0250 0131
这就是代码:
Vector<int[]> vc = new Vector<int[]>();
try {
BufferedReader file = new BufferedReader(new FileReader("myfile.txt"));
String s;
int[] vec = new int[2];
while ((s = file.readLine()) != null) {
vec[0] = Integer.parseInt(s.substring(0, 4).trim());
vec[1] = Integer.parseInt(s.substring(5, 8).trim());
vc.add(vec);
}
file.close();
} catch (IOException e) {
}
for(int i=0; i<vc.size(); i++){
for(int j=0; j<2; j++){
System.out.println(vc.elementAt(i)[j]);
}
}
但输出只显示最后一行。
250
131
250
131
250
131
我应该以某种方式使用Vector.nextElement()
来获取我的所有数据吗?
答案 0 :(得分:3)
你需要在循环的每次传递中创建一个新的int []
while ((s = file.readLine()) != null) {
int[] vec = new int[2];
vec[0] = Integer.parseInt(s.substring(0, 4).trim());
vec[1] = Integer.parseInt(s.substring(5, 8).trim());
vc.add(vec);
}
否则你只有多个引用同一个数组,你在每次传递时都会覆盖它。
答案 1 :(得分:1)
您基本上将同一个数组三次添加到Vector
,同时更新其值(这就是为什么您拥有的值是文件中的最后一个)。
最后,您将在Vector
中有3个引用指向同一个变量的引用,您需要在每次迭代时实例化一个新引用,而不仅仅是在开始时。这是因为当您将vec
添加到向量时,{{1}}不会被欺骗,只会传递它的引用。