2013-04-06 80 views
0

我想根據學生姓名從ArrayList中刪除一個對象,每個對象都有5個元素。 問題:我如何從文本文件中刪除對象。如何從ArrayList中刪除對象?

ArrayList<Student> studentList= new ArrayList<Student>(); 
Iterator iter = studentList.iterator(); 

public DVD remove(String removeName) { 
    while (iter.hasNext()) { 
     for (Student stu : studentList) { 
      if (stu .GetName().toUpperCase().contains(removeName.toUpperCase())) { 
       System.out.println("Found And Removed"); 
       iter.remove(); 
       return stu ; 
      } 

      System.out.println("Not Found"); 
     } 
    } 
    return null; 

} 

從文本文件讀入每個學生。每行一個元素。

例:

John Smith 
    Undergrad 
    21 years old 
    2010 
    2014 
    Pocahantas 
    Professor 
    369 years old 
    1599 
    1603 
    Etc... // new person 
    etc.... 
+2

問題是什麼? – Reimeus 2013-04-06 20:31:39

+0

@Reimeus如何從文本文件中刪除對象。 – trama 2013-04-06 20:32:21

+0

這功課嗎?如果是這樣你應該這樣標記 – Mike 2013-04-06 20:34:17

回答

0

我不認爲你需要一個Iterator:

public Student remove(String removeName) { 
     for (Student stu : studentList) { 
      if (stu.getName().toUpperCase().contains(removeName.toUpperCase())) { 
       System.out.println("Found and Removed"); 
       studentList.remove(stu); 
       return stu; 
      } 
     } 
     System.out.println("Not Found"); 
     return null; 
    } 
+1

實際上,如果studentList是一個'ArrayList',那麼很可能會導致'java.util.ConcurrentModificationException'。 – m3th0dman 2013-04-06 20:42:48

+1

在這種情況下,由於循環在消除後結束,因此不會引發異常,因此不會再次針對下一個元素進行求值。但是,你是對的。如果此函數的目的是刪除'ArrayList'中的_several_匹配元素,則在刪除元素之後循環重複時,將拋出ConcurrentModificationException。 – Noe 2013-04-06 21:15:54

0

您正在使用的方式是錯誤的迭代器;如果您正在使用外部迭代器迭代沒有必要爲for聲明:

while (iter.hasNext()) { 
    Student stu = iter.next(); 
    if (stu .GetName().toUpperCase().contains(removeName.toUpperCase())) { 
     System.out.println("Found And Removed"); 
     iter.remove(); 
     return stu ; 
    } 
    System.out.println("Not Found"); 
    } 
} 

如果你知道之前的學生(或它的位置),你可以簡單地從List接口調用remove方法,但如果你想在迭代集合時刪除它,那麼外部迭代器就是大多數Java集合的方式。

0

如果我理解正確,您想要刪除與要從文本文件中刪除的學生姓名相對應的5行。

如果這是你想要做什麼,然後指

Find a line in a file and remove it

這對於消除一個單行的片段。您需要做的是在您遇到要刪除的名稱時立即刪除接下來的5行。