Java 过滤字符串的数组列表

Java 过滤字符串的数组列表,java,Java,我有一个字符串数组列表,我想删除低于一定长度的字符串。我在想这个方法: for (int i = 0; i < result.size(); i++) { if (result.get(i).split("\\s").length != maxLength) { System.out.println(result.get(i)); result.remove(i); }

我有一个字符串数组列表,我想删除低于一定长度的字符串。我在想这个方法:

        for (int i = 0; i < result.size(); i++) {
            if (result.get(i).split("\\s").length != maxLength) {
                System.out.println(result.get(i));
                result.remove(i);
}
        }
for(int i=0;i

但它只是删除了几个条目,因为当它删除一个条目时,它会将下一个条目替换为已删除的条目。另一种方法是什么

尝试从最后一个迭代到第一个:

    for (int i = result.size() - 1; i >= 0; i--) {
        if (result.get(i).split("\\s").length != maxLength) {
            System.out.println(result.get(i));
            result.remove(i);
        }
    }

当您删除一个时,您应该减少索引,以考虑到以下内容已发生移动,如
result.remove(i-)

您需要再次修改
i
,以确保它覆盖了数组列表的完整序列,或者如其他答案所示,最后一步->第一步

for (int i = 0; i < result.size(); i++) {
    if (result.get(i).split("\\s").length != maxLength) {
        result.remove(i);
        i--; // everything has been moved up in the arraylist
    }
}
或:


使用迭代器,例如:

final Iterator<String> x = list.iterator();
while (iterator.hasNext()) {
    if (someCondition) {
        iterator.remove();
    }
}
final迭代器x=list.Iterator();
while(iterator.hasNext()){
如果(某些条件){
iterator.remove();
}
}

切勿以这种方式从ArrayList中删除。请改用迭代器:

Iterator<String> stringIterator = result.iterator();
while (stringIterator.hasNext()) {
    String string = stringIterator.next();
    if (string.split("\\s").length != maxLength) {
        System.out.println(string);
        stringIterator.remove();
    }
}
Iterator stringIterator=result.Iterator();
while(stringIterator.hasNext()){
String=stringIterator.next();
if(string.split(“\\s”).length!=maxLength){
System.out.println(字符串);
stringIterator.remove();
}
}

你需要从终点开始,一路前行

for (int i = result.size() - 1; i >= 0; i--) {
    if (result.get(i).length < maxLength) {
        System.out.println(result.get(i));
        result.remove(i);
    }
}
for(int i=result.size()-1;i>=0;i--){
if(result.get(i).length
要从集合中删除元素,应使用迭代器

for (Iterator<String> iter = list.iterator(); iter.hasNext();) {
      String s = iter.next();
      if (s.split("\\s").length != maxLength) {
        iter.remove();
      }
      else {
        System.out.println(s);
      }
    }
for(迭代器iter=list.Iterator();iter.hasNext();){
字符串s=iter.next();
如果(s.split(“\\s”).length!=最大长度){
iter.remove();
}
否则{
系统输出打印项次;
}
}
如果您碰巧使用:


你想干什么?您正在测试由字符串返回的数组长度,该字符串由文本“\s”分割。我还没有看到您的字符串列表,但我希望test语句总是计算1!=maxLength。在所有编程中,传统的做法是从结尾向后走。
for (int i = result.size() - 1; i >= 0; i--) {
    if (result.get(i).length < maxLength) {
        System.out.println(result.get(i));
        result.remove(i);
    }
}
for (Iterator<String> iter = list.iterator(); iter.hasNext();) {
      String s = iter.next();
      if (s.split("\\s").length != maxLength) {
        iter.remove();
      }
      else {
        System.out.println(s);
      }
    }
CollectionUtils.filter(result, new Predicate()
{
    @Override
    public boolean evaluate(Object object)
    {
        return ((String) object).split("\\s").length >= maxLength;
    }
}));