如下代码:
Myv是一个ArrayList
for(int i=0;i<Myv.size();i++){
if(Myv.get(i)==null || Myv.get(i).toString().substring(0,1).equals("\n")){
Myv.remove(i);
}
}
运行完后Myv.size()值还是原来的值。很奇怪。谁有ArrayList的所有用法规则啊,麻烦给贴出来。
Myv是一个ArrayList
for(int i=0;i<Myv.size();i++){
if(Myv.get(i)==null || Myv.get(i).toString().substring(0,1).equals("\n")){
Myv.remove(i);
}
}
运行完后Myv.size()值还是原来的值。很奇怪。谁有ArrayList的所有用法规则啊,麻烦给贴出来。
->
Myv.get(i)!=null
->
Myv.get(i)!=null && Myv.get(i).toString().substring(0,1).equals("\n"))=======
还是这样??楼主说说你想删什么呀
public void trimToSize()将此 ArrayList 实例的容量调整为列表的当前大小。应用程序可以使用此操作来最小化 ArrayList 实例的存储量。
--------------------------------------------------------------------------------ensureCapacity
public void ensureCapacity(int minCapacity)如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。 参数:
minCapacity - 所需的最小容量。--------------------------------------------------------------------------------size
public int size()返回此列表中的元素数。 指定者:
接口 Collection<E> 中的 size
指定者:
接口 List<E> 中的 size
指定者:
类 AbstractCollection<E> 中的 size
返回:
此列表中的元素数。--------------------------------------------------------------------------------isEmpty
public boolean isEmpty()测试此列表中是否没有元素。 指定者:
接口 Collection<E> 中的 isEmpty
指定者:
接口 List<E> 中的 isEmpty
覆盖:
类 AbstractCollection<E> 中的 isEmpty
返回:
如果此列表中没有元素,则返回 true;否则返回 false。--------------------------------------------------------------------------------contains
public boolean contains(Object elem)如果此列表中包含指定的元素,则返回 true。 指定者:
接口 Collection<E> 中的 contains
指定者:
接口 List<E> 中的 contains
覆盖:
类 AbstractCollection<E> 中的 contains
参数:
elem - 测试此列表中是否存在的元素。
返回:
如果指定的元素存在,则返回 true;否则返回 false。--------------------------------------------------------------------------------indexOf
public int indexOf(Object elem)搜索给定参数第一次出现的位置,使用 equals 方法进行相等性测试。 指定者:
接口 List<E> 中的 indexOf
覆盖:
类 AbstractList<E> 中的 indexOf
参数:
elem - 一个对象。
返回:
此列表中第一次出现该参数的位置索引;如果没有找到该对象,则返回 -1。
另请参见:
Object.equals(Object)--------------------------------------------------------------------------------lastIndexOf
public int lastIndexOf(Object elem)返回指定的对象在列表中最后一次出现的位置索引。 指定者:
接口 List<E> 中的 lastIndexOf
覆盖:
类 AbstractList<E> 中的 lastIndexOf
参数:
elem - 所需的元素。
返回:
指定的对象在列表中最后一次出现的位置索引;如果没有找到该对象,则返回 -1。--------------------------------------------------------------------------------clone
public Object clone()返回此 ArrayList 实例的浅表复制。(不复制这些元素本身。) 覆盖:
类 Object 中的 clone
返回:
此 ArrayList 实例的一个克隆。
另请参见:
Cloneable--------------------------------------------------------------------------------toArray
public Object[] toArray()返回一个按照正确的顺序包含此列表中所有元素的数组。 指定者:
接口 Collection<E> 中的 toArray
指定者:
接口 List<E> 中的 toArray
覆盖:
类 AbstractCollection<E> 中的 toArray
返回:
以正确的顺序包含此列表中所有元素的数组。
另请参见:
Arrays.asList(Object[])--------------------------------------------------------------------------------toArray
public <T> T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组;返回数组的运行时类型就是指定数组的运行时类型。如果列表能放入指定的数组,则返回放入此列表元素的数组。否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组。
如果指定的数组能容纳列表并有剩余空间(即数组的元素比列表的多),那么会将数组中紧跟在集合末尾的元素设置为 null。这对确定列表的长度很有用,但只 在调用方知道列表中不包含任何 null 元素时才有用。
指定者:
接口 Collection<E> 中的 toArray
指定者:
接口 List<E> 中的 toArray
覆盖:
类 AbstractCollection<E> 中的 toArray
参数:
a - 要存储列表元素的数组,如果它足够大的话;否则,它是一个为存储列表元素而分配的、具有相同运行时类型的新数组。
返回:
包含列表元素的数组。
抛出:
ArrayStoreException - 如果 a 的运行时类型不是此列表中每个元素的运行时类型的超类型。--------------------------------------------------------------------------------get
public E get(int index)返回此列表中指定位置上的元素。 指定者:
接口 List<E> 中的 get
指定者:
类 AbstractList<E> 中的 get
参数:
index - 所返回元素的索引。
返回:
此列表中指定位置上的元素。
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())。--------------------------------------------------------------------------------set
public E set(int index,
E element)用指定的元素替代此列表中指定位置上的元素。 指定者:
接口 List<E> 中的 set
覆盖:
类 AbstractList<E> 中的 set
参数:
index - 要替代的元素的索引。
element - 存储在指定位置上的元素。
返回:
以前位于该指定位置上的元素。
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())。
for(int i=list.size()-1;i>=0;i++){
list.remove(i);
}切记切记
相法:Myv.get(i)为null或者为"\n",则删除这个元素。那里错了啊!
public boolean add(E o)将指定的元素追加到此列表的尾部。 指定者:
接口 Collection<E> 中的 add
指定者:
接口 List<E> 中的 add
覆盖:
类 AbstractList<E> 中的 add
参数:
o - 要追加到此列表中的元素。
返回:
true(按照 Collection.add 的常规协定)。--------------------------------------------------------------------------------add
public void add(int index,
E element)将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素(如果有)以及所有后续元素(将其索引加 1)。 指定者:
接口 List<E> 中的 add
覆盖:
类 AbstractList<E> 中的 add
参数:
index - 指定元素所插入位置的索引。
element - 要插入的元素。
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index > size())。--------------------------------------------------------------------------------remove
public E remove(int index)移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。 指定者:
接口 List<E> 中的 remove
覆盖:
类 AbstractList<E> 中的 remove
参数:
index - 要移除的元素的索引。
返回:
从列表中移除的元素。
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())。--------------------------------------------------------------------------------remove
public boolean remove(Object o)从此列表中移除指定元素的单个实例(如果存在),此操作是可选的。更正式地说,如果列表包含一个或多个满足 (o==null ? e==null : o.equals(e)) 的元素 e,则移除该元素。如果列表中包含指定的元素,则返回 true(或者等同于这种情况:如果列表随调用的结果而发生改变,则返回 true)。
指定者:
接口 Collection<E> 中的 remove
指定者:
接口 List<E> 中的 remove
覆盖:
类 AbstractCollection<E> 中的 remove
参数:
o - 要从此列表中移除的元素(如果存在)。
返回:
如果此列表包含指定的元素,则返回 true。--------------------------------------------------------------------------------clear
public void clear()移除此列表中的所有元素。此调用返回后,列表将为空。 指定者:
接口 Collection<E> 中的 clear
指定者:
接口 List<E> 中的 clear
覆盖:
类 AbstractList<E> 中的 clear--------------------------------------------------------------------------------addAll
public boolean addAll(Collection<? extends E> c)按照指定 Collection 的迭代器所返回的元素顺序,将该 Collection 中的所有元素追加到此列表的尾部。如果正在进行此操作时修改指定的 Collection,那么此操作的行为是不明确的。(这意味着如果指定的 Collection 是此列表且此列表是非空的,那么此调用的行为是不明确的。) 指定者:
接口 Collection<E> 中的 addAll
指定者:
接口 List<E> 中的 addAll
覆盖:
类 AbstractCollection<E> 中的 addAll
参数:
c - 要插入到此列表中的元素。
返回:
如果此列表随调用的结果而发生改变,则返回 true。
抛出:
NullPointerException - 如果指定的 collection 为 null。
另请参见:
AbstractCollection.add(Object)--------------------------------------------------------------------------------addAll
public boolean addAll(int index,
Collection<? extends E> c)从指定的位置开始,将指定 Collection 中的所有元素插入到此列表中。向右移动当前位于该位置的元素(如果有)以及所有后续元素(增加其索引)。新元素将按照指定 Collection 的迭代器所返回的元素顺序出现在列表中。 指定者:
接口 List<E> 中的 addAll
覆盖:
类 AbstractList<E> 中的 addAll
参数:
index - 插入指定 collection 中的首个元素的位置索引。
c - 要插入此列表中的元素。
返回:
如果此列表随调用的结果而发生改变,则返回 true。
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index > size())。
NullPointerException - 如果指定的 Collection 为 null。--------------------------------------------------------------------------------removeRange
protected void removeRange(int fromIndex,
int toIndex)移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。向左移动所有后续元素(减小其索引)。此调用将列表缩短了 (toIndex - fromIndex) 个元素。(如果 toIndex==fromIndex,则此操作无效。) 覆盖:
类 AbstractList<E> 中的 removeRange
参数:
fromIndex - 要移除的首个元素的索引。
toIndex - 最后一个要移除的元素后面那个元素的索引。
什么意思?删掉null的?
晕
相法:Myv.get(i)为null或者为"\n",则删除这个元素。那里错了啊!
===================
你确信Myv里面有符合条件的元素么
越看越奇怪,你怎么知道0位置是"\n"呢,你的判断一定有问题。换行在windows下面可能是"\r\n"
有啊,我在断点里面都看到了啊,Myv里面有“null”、“\n”、还有其它字符
有可能,所以才用或者啊!
你在ArrayList里存的是String吧
=========================
试试:
Myv.get(i).toString().substring(0,1).equals("\n"))
->
((String)Myv.get(i)).substring(0,1).equals("\n"))
String)Myv.get(i))和Myv.get(i).toString()有什么很大的区别吗
for(int i=list.size()-1;i>=0;i++){
list.remove(i);
}
它是正确的还是说
for(int i=list.size()-1;i>=0;i--){
list.remove(i);
}
是正确的啊!
=======================
那真就看不出来是哪的问题了不会是取出来的时候, null变成了“null”,"\n"变成了“\\n”??
前者你试试Myv.get(i).toString().equals("null"))
后者你试试Myv.get(i).toString().substring(0,1).equals("\\"))
看删没删?
static void filter(Collection<?> c) {
for (Iterator<?> it = c.iterator(); it.hasNext(); )
if (!cond(it.next()))
it.remove();
}
if(Myv.get(i)!=null && Myv.get(i).toString().substring(0,1).equals("\n")){
Myv.remove(i);
i --;
}
}
或者
for(int i= Myv.size() -1;i>=0;i--){
if(Myv.get(i)!=null && Myv.get(i).toString().substring(0,1).equals("\n")){
Myv.remove(i);
}
}
LZ应该学会Debug……
Array XXX=new Array();
移到循环中去试试