我读了一个.ini文件并将每个属性放入一个临时数组中,最后我把它放到一个向量中 - 直到这里工作正常。
但是如果我想访问该向量中的每个数组,我总是得到相同的结果,这是不可能的。我尝试了不同的方式,不同的循环和一切不同,但总是相同的结果,这是我的实际代码:
tmp2 = new String[2];
for(Enumeration e=allPropertys.elements(); e.hasMoreElements();) {
tmp2 = (String[])e.nextElement();
for(int i = 0; i < tmp2.length; i++)
{
System.out.println(tmp2[i]);
}
}
以下是我将所有内容放入向量的代码:
try {
tmp = new String[2];
prop = new Properties();
prop.load(new FileReader("konfig.ini"));
Enumeration e = prop.propertyNames();
while (e.hasMoreElements()) {
String key = (String)e.nextElement();
String value = prop.getProperty( key );
tmp[0] = key + " " + value;
tmp[1] = value;
System.out.println("Property: " + tmp[0] + " und Value: " + tmp[1]);
allPropertys.add(tmp);
}
}
答案 0 :(得分:6)
我的猜测是,当你填充向量时,你会为每个属性重用相同的字符串数组。这使得向量包含10次(10为条目数)相同的数组:
String[] property = new String[2];
for (every line in the file) {
property[0] = ...;
property[1] = ...;
vector.add(property);
}
这应该替换为
for (every line in the file) {
String[] property = new String[2];
property[0] = ...;
property[1] = ...;
vector.add(property);
}
另外,请注意在您的代码段中,您创建了一个新的String数组来初始化您的tmp2变量,然后将其值替换为向量中的值。初始化是不必要的。
答案 1 :(得分:0)
您正在替换数组中的值,并将一遍又一遍的数组放入集合中。
您必须了解对象和数组的工作原理。你认为将它添加到集合中会复制它(这就是为什么你在读取部分循环之前初始化数组的原因,我认为)。它只添加了参考。你总是使用参考文献。
每次要添加它时,都必须创建一个新数组。将数组变量(或任何对象变量)视为对象的引用。作为真实的箭头。将它添加到矢量时,您将箭头添加到内存中的相同结构(相同的两个桶)。