使用for循环将子列表添加到ArrayList

时间:2014-12-09 14:53:17

标签: java arraylist alphabetical

我试图制作一个方法,删除两个字符串的字母范围内的所有单词。我给出的参数应该基本上删除所有内容,但这是我的输出:

[和我的朋友]

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

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);
    }

2 个答案:

答案 0 :(得分:1)

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

例如:

    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
            }
        }
    }

答案 1 :(得分:0)

您希望向后浏览列表。 我现在不会告诉你为什么要自己解决这个问题...如果你不能,请问:)