我试图制作一个方法,删除两个字符串的字母范围内的所有单词。我给出的参数应该基本上删除所有内容,但这是我的输出:
[和我的朋友]
我真的不明白为什么???
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);
}
答案 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)
您希望向后浏览列表。 我现在不会告诉你为什么要自己解决这个问题...如果你不能,请问:)