编写一个方法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。它有什么问题?
答案 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
}
}
}
使用递归调用功能。