我试图从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);
}
但没有运气..
答案 0 :(得分:0)
首先,删除&#39;!&#39;在你的第二个代码if(!classes.get(i).contains("yago"))
,我认为它应该工作。
如果它不胜,请提供一些基本代码ClassesRetrieval.getYagoClasses();
,
答案 1 :(得分:0)
我在我自己创建的列表上测试了第一个代码。它有效,但是如果你想删除不包含“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);
}
答案 2 :(得分:0)
可能会因为反向迭代以避免索引问题。尝试这样的事情:
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);
}
}
答案 3 :(得分:0)
确实不建议使用for循环来删除元素。考虑有两个连续的字符串,两个字符串都包含“yago”。它将删除第一个,递增i并跳过第二个字符串(因为它现在具有第一个字符串的索引)。
尝试使用while循环,只有在不删除元素时才增加(或者,如果你讨厌分支,则将for循环从大到小反转)。
至于你的第一个例子,现在它删除所有包含“yago”的内容。如果你放一个!在条件之前它应该正常工作。
答案 4 :(得分:0)
我没有看到你的语法/逻辑有什么问题。但是,条件可能
!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));
}
}
我希望你觉得这很有用。
答案 5 :(得分:0)
您展示的第二段代码应该可行。你为什么在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);
}