gpt4 book ai didi

java - 在 Java 中检查 ArrayList 元素(从 csv 文件中提取)并使用所需的逻辑解析它们时出错

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:43 25 4
gpt4 key购买 nike

我读取了一个 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将关闭,第一次删除后您将不会删除正确的元素。

说出您的 i5并且您已删除该元素,在下一次迭代中 i6 , 当你做 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com