【问题标题】:Add sublists to ArrayList with for loop使用 for 循环将子列表添加到 ArrayList
【发布时间】:2014-12-09 14:53:16
【问题描述】:

我正在尝试创建一种方法来删除两个字符串的字母范围内的所有单词。我给出的参数应该基本上删除所有内容,但这是我的输出:

[还有,我的朋友们]

我真的不明白为什么???

public static void main(String[] args) {
        ArrayList<String> stringList = new ArrayList<String>();
        stringList.add("hello");
        stringList.add("and");
        stringList.add("welcome");
        stringList.add("my");
        stringList.add("little");
        stringList.add("friends");
        System.out.println(stringList);
        removeInRange(stringList, "abc", "zen");
    }

    public static void removeInRange(ArrayList<String> arrayList, String start, String end) {
        char startChar = start.charAt(0);
        char endChar = end.charAt(0);
        for (int i = 0; i < arrayList.size(); i++) {
            Character target = arrayList.get(i).charAt(0);
            for (char c = startChar; c <= endChar; c++) { 
                if (target.equals(c)) {
                    arrayList.remove(i);
                }
            }
        }
        System.out.println(arrayList);
    }

【问题讨论】:

  • 当您从列表中删除并在选择 arrayList.get(i) 时更改 i 时,不要将索引用作迭代的一部分

标签: java arraylist alphabetical


【解决方案1】:

当你从 ArrayList 中移除一个元素时,它后面的元素的所有索引都会减一。您必须在循环中考虑到这一点:

例如:

    for (int i = 0; i < arrayList.size(); i++) {
        Character target = arrayList.get(i).charAt(0);
        for (char c = startChar; c <= endChar; c++) { 
            if (target.equals(c)) {
                arrayList.remove(i);
                i--; // this would make sure you don't skip any element in the list
            }
        }
    }

【讨论】:

  • Eran 是正确的,但是可以改进对字符的检测,而无需使用 for 循环进行字符检查。使用if (target &gt;= startChar &amp;&amp; target &lt;= endChar) 将是一个小的改进。
【解决方案2】:

您想向后浏览列表。 如果你想自己弄清楚,我现在不会告诉你为什么......如果你不能,问:)

【讨论】:

  • 为什么?它回答了这个问题,不是吗?
  • 是的,但您的回答更多的是评论、建议,而不是 SO 答案。
  • @KarelG 当您将鼠标悬停在 add comment 链接上时,会显示一条消息“使用 cmets 询问更多信息或提出改进建议。避免在 cmets 中回答问题。”这不是“建议”,而是直接回答了 OP 的问题,为什么他们的代码不起作用。另外,无论谁否决了这个答案,你能解释一下你认为它没有用吗?不正确吗?不清楚?不相关?
猜你喜欢
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 2020-08-12
相关资源
最近更新 更多