删除均匀长度

时间:2013-04-06 17:29:15

标签: java

编写一个方法removeEvenLength,它将String的ArrayList作为参数,并从列表中删除所有偶数长度的字符串。

public void removeEvenLength(ArrayList <String> stringList){
    for(int i=0;i<stringList.size();i++){
        String word=stringList.get(i);
        if(word.length()%2==0){//even
            stringList.remove(word);//if it is even,test from the first word  then continue looping


        }


    }
}

当我试图传入[“这个”,“是”,“一个”,“测试”]时,它应该归还给我一个而不是它给我的是,a。它有什么问题?

6 个答案:

答案 0 :(得分:4)

提示:您在迭代期间从列表中删除当前项。想想这可能会对随后的迭代产生什么影响。

答案 1 :(得分:1)

在循环显示项目时从列表中删除项目时使用Iterator。它会为你解决这个问题。

public void removeEvenLength( List<String> stringList ) {
    Iterator<String> iterator = stringList.iterator();
    while( iterator.hasNext() ) {
        final String word = iterator.next();
        if( word.length() % 2 == 0 ) {
            iterator.remove();
        }
    }
}

更好的方法是创建一个包含奇数长度的所有值的新列表。这样您就不会修改原始列表。通常,功能越多没有副作用,它们就越好。

public List<String> removeEvenLength( List<String> stringList ) {
    List<String> oddList = new ArrayList<String>();
    for( String word : stringList ) {
        if( word.length % 2 == 1 ) {
            oddList.add( word );
        }
    }
    return oddList;
}

答案 2 :(得分:0)

你可以试试下面的吗?它对我有用

import java.util.*;

class Fun
{
    public static void removeEvenLength(ArrayList <String> stringList){
        for(int i=0;i<stringList.size();i++){
            String word=stringList.get(i);
            if(word.length()%2==0){//even
                stringList.remove(word);//if it is
                i = i-1;
                continue;
            }
        }

        for(int i=0;i<stringList.size();i++){
            String word=stringList.get(i);
            System.out.println(word);
        }
    }

public static void main(String []args)
{
    ArrayList <String> stringList = new ArrayList <String>();
    stringList.add("this");
    stringList.add("is");
    stringList.add("a");
    stringList.add("test");
    removeEvenLength(stringList);
}

}

答案 3 :(得分:0)

在Java 8中,可以使用removeIf(predicate)从Collection中删除元素,而无需手动创建Iterator:

Set<String> set = new HashSet<String>(Arrays.asList("1234","wsxw","qaz","qwertyui","q","qwe","qwerty","qwqw"));
set.removeIf(p -> p.length() %2 == 0);

Set<String> set = new HashSet<String>(Arrays.asList("1234","wsxw","qaz","qwertyui","q","qwe","qwerty","qwqw")); set.removeIf(p -> p.length() %2 == 0);

答案 4 :(得分:0)

这是我的方法:)

public static void removeEvenLength(ArrayList<String> l){

    ArrayList<String> temp = new ArrayList<>();
    for(String word : l){

        if(word.length()%2==0){temp.add(word);}

    }

    l.removeAll(temp);
    


}

答案 5 :(得分:-1)

public static void removeEvenLength(ArrayList <String> stringList){
        for(int i=0;i<stringList.size();i++){
            String word=stringList.get(i);
            System.out.println(word+" "+word.length()+" "+word.length()%2);
            if(word.length()%2==0){//even
                System.out.println("Rmoving "+word);
                stringList.remove(word);
                removeEvenLength(stringList);//Recursive call
            }
        }
    }

使用递归调用功能。