【发布时间】:2015-11-08 10:43:48
【问题描述】:
我读取了一个 CSV 文件,如下所示。
,Tmt 1,Tmt 2,Tmt 3
delta 1,-104,-100,-103
delta 2,-125,-103,-103
delta 3,-104,-100,failed
后来,我解析了 csv 文件并将其所有元素放入字符串的 ArrayList。 现在 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]
(这不是我所期望的)
请帮忙..提前谢谢
【问题讨论】:
-
嗯,你期望做了什么,为什么?您是否使用调试器逐步完成此操作,并找出问题所在?您是否确定问题出在使用列表还是字符串处理上?要记住的一件事:如果您从列表中删除一个项目,其他所有内容都会随机排列...因此您要检查的下一个项目将与您刚刚删除的项目具有 same 索引。您可以通过在
remove调用之后添加i--来解决此问题。或者,您可以从列表的结尾一直到开头。 -
或者你可以创建另一个列表,只包含你想要保留的元素。
-
Jon Skeet,我原以为生成的数组列表中没有以字母开头的元素。