我有数组的字符串列表。我想检查特定时刻,如果在这个数组中我有比“i”更多的元素,如果是的话我想删除那些元素。例如。我在数组中有五个元素。我选择索引为4的元素。我想检查是否存在更高的元素(在这种情况下,更高的将是索引为5的元素)并删除该元素。如果我选择3个元素,我想删除4个和5个元素。我做了类似的事情:
for(int j = 0; j<descriptions.size();j++){
if(!descriptions.get(i+1).isEmpty()){
descriptions.remove(i+1);
}
}
当我选择3个元素并删除了两个元素时,此解决方案效果很好。但是当我想要选择4个元素时,我会得到索引超出范围的异常。我怎么能解决我的问题?
答案 0 :(得分:2)
我不太清楚你的代码中使用for循环的意义。
您可能要做的是删除列表中第i个元素之外的任何项目。
最简单的方法是重复删除列表中的最后一个元素。
以下是供参考的示例代码:
while(descriptions.size() > i){
descriptions.remove(descriptions.size()-1);
}
答案 1 :(得分:0)
我在数组中有五个元素。我选择索引为4的元素。
第五个元素在索引4.如果你想选择第四个元素,它的索引将是3。
修改您的代码如下:
int size = descriptions.size();
for(int j = size -1; j>choosenNum; j--)
{
descriptions.remove(j);
}
答案 2 :(得分:0)
for(int i = descriptions.size()-1; i > indexToDeleteAfter; i--){
descriptions.remove(i);
}
或者,遵从ArrayList:
if(descriptions.size() - 1 > indexToDeleteAfter)
{
descriptions.removeRange(indexToDeleteAfter + 1, descriptions.size() - 1);
}
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#removeRange(int,%20int)
答案 3 :(得分:0)
public static void main(String[] args) {
//list of string with 5 elements
List<String> descriptions = new ArrayList<String>();
descriptions.add("first");
descriptions.add("second");
descriptions.add("third");
descriptions.add("4");
descriptions.add("5");
//the size you want to check for the list
int i = 3;
int howMuchToRemove = descriptions.size()-i;
//if the list how more object from > i , we will remove objects from it
if (howMuchToRemove > 0)
for (int j=0 ; j < howMuchToRemove ; j++)
//remove the last object in the list
descriptions.remove(descriptions.size()-1);
System.out.println(descriptions.toString());
}
答案 4 :(得分:0)
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("a");
list.add("a");
list.add("a");
list.add("a");
indexToRemove(list, 5);
}
private static void indexToRemove(ArrayList<String> list, int index) {
if (list.size() > index) {
list.remove(index);
System.out.println(index + "th item removed");
} else
System.out.println("Can't remove");
}
你的意思是一个将删除给定索引元素的函数?试试这个。