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

标签 java csv arraylist

我读取了一个 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/

相关文章:

java - 无法在 java 中正确覆盖 keyPressed(KeyEvent)

java - 使用 CardDAV 从 Java 应用程序共享通讯录

python - 提速生成器->列表-> Python中的CSV

python - DataFrame iterrows() 和 .to_csv : Writing row by row

android - 如何实现对使用 ListAdapater、ArrayList 和 HashMap 的 ListView 的搜索

java - 逻辑错误; Java 姓名搜索编程挑战赛

java - 具有嵌套 ArrayList 的对象的线程安全 HashMap

java - 打印未找到文件的 NullPointerException

python - 如何使用 python 从我的 CSV 中捕获打印数据

java - JWT 签名无效