[英]Elements are not being removed from ArrayList
我試圖從arrayList中刪除不包含特定字符串但沒有運氣的元素。 我正在使用以下代碼:
ArrayList<String> classes = ClassesRetrieval.getYagoClasses();
Iterator<String> it = classes.iterator();
while(it.hasNext()){
if(it.next().contains("yago")){
it.remove();
}
}
for(String i : classes){
System.out.println(i);
}
我也試過
for(int i=0;i<classes.size();i++){
if(!classes.get(i).contains("yago")){
classes.remove(i);
}
}
for(String i : classes){
System.out.println(i);
}
但是沒有運氣
首先,刪除“!” 在您的第二個代碼if(!classes.get(i).contains("yago"))
,我認為它應該工作。 如果不行,請提供一些ClassesRetrieval.getYagoClasses();
基本代碼ClassesRetrieval.getYagoClasses();
, 請。
我在自己創建的列表上測試了您的第一個代碼。 它起作用了,但是如果您要刪除不包含“ yago”的字符串,那么您將缺少!
。
ArrayList<String> classes = ClassesRetrieval.getYagoClasses();
Iterator<String> it = classes.iterator();
while(it.hasNext()){
if(!it.next().contains("yago")){
it.remove();
}
}
for(String i : classes){
System.out.println(i);
}
此后可能要進行反向迭代以避免索引問題。 嘗試這樣的事情:
for(int i=classes.size()-1; i>=0; i--)
{
//get a string from list
String s = classes.get(i);
if(!s.contains("yago"))
{
//if the string does not contain yago, remove it
classes.remove(i);
}
}
確實不建議使用for循環來刪除元素。 考慮具有兩個連續的字符串,兩個字符串都包含“ yago”。 它將刪除第一個,增加i並跳過第二個字符串(因為它現在具有第一個字符串的索引)。
嘗試while循環,僅在不刪除元素的情況下才遞增(或者,如果您討厭分支,則將for循環從較大改為較小)。
對於您的第一個示例,現在它將刪除所有確實包含“ yago”的對象。 如果放了! 在這種情況下,它應該可以正常工作。
我沒有發現您的語法/邏輯有任何問題。 但是,條件可能
!classes.get(i).contains("yago")
沒有被滿足。 為了測試這是否成立,如果條件成立,我將打印一些內容。 例如:
for(int i=0;i<classes.size();i++){
if(!classes.get(i).contains("yago")){
classes.remove(i);
System.out.println("Condition Met");
}
}
您甚至可以這樣打印已刪除的元素:
for(int i=0;i<classes.size();i++){
if(!classes.get(i).contains("yago")){
System.out.println(classes.remove(i));
}
}
我希望你覺得這有幫助。
您顯示的第二段代碼應該可以工作。 為什么在for循環中使用否定(!)? 我認為您想要的是:
for(int i=0; i<classes.size(); i++){
if(classes.get(i).contains("yago")){
classes.remove(i);
}
}
這種方法的問題在於,當您從列表中刪除元素時,會更改其大小。 您可以創建一個空的ArrayList,並在不遵守條件的情況下繼續向其中添加新元素:
List<String> tmp = new ArrayList();
for(String token : classes){
if(!token.contains("yago")){
tmp.add(token);
}
}
for(String i : tmp){
System.out.println(i);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.