我读取了一个 CSV 文件,如下所示。
,Tmt 1,Tmt 2,Tmt 3
delta 1,-104,-100,-103
delta 2,-125,-103,-103
delta 3,-104,-100,failed
后来,我解析了 csv 文件并将其所有元素都放入了一个字符串数组列表中。 现在 ArrayList 看起来像
[Tmt 1, Tmt 2, Tmt 3, delta 1, -104, -100, -103, delta 2, -125, -103, -103, delta 3, -104, -100, failed]
现在,我想删除以字母表开头的 String ArrayList(如上所示)的所有元素。我使用以下代码来做到这一点。 (al1 是我上面提到的 ArrayList,temp 是我用来检查 al1 的元素的字符串)
for(int i=0;i<al1.size();i++)
{
temp = al1.get(i);
if (temp.charAt(0)=='-'|| (Character.isDigit(temp.charAt(0))==false))
{
al1.remove(i);
}
}
System.out.print(al1);
现在代码运行后希望删除al1中以字母开头的元素,我打印了ArrayList al1,结果如下:
[Tmt 2, delts 1, -100, delta 2, -103, delta 3, -100]
(这不是我所期望的)
请帮助..提前致谢
最佳答案
问题是您正在使用索引来删除元素。
当您删除一个元素时,您的 i
将关闭,第一次删除后您将不会删除正确的元素。
说出您的 i
是5
并且您已删除该元素,在下一次迭代中 i
是6
, 当你做 al1.get(i)
你实际上会得到 7th
原始列表中的元素,而不是第 6 个元素,因为您的第 6 个元素索引现在是 5
但不是 6
.因此,您将根本无法访问该元素。
你的for(int i=0;i<al1.size();i++)
也不正确,因为您正在递增 i
并减小 al1
的大小.
在最坏的情况下(when all the elements in the list starts with '-'
),您将只能遍历一半的元素。
更安全的方法是使用迭代器。
Iterator<> it = al1.iterator();
while(it.hasNext()){
temp = it.next();
if (temp.charAt(0)=='-'|| (Character.isDigit(temp.charAt(0))==false))
{
it.remove();
}
}
关于java - 在 Java 中检查 ArrayList 元素(从 csv 文件中提取)并使用所需的逻辑解析它们时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32022553/