如下代码:
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的所有用法规则啊,麻烦给贴出来。

解决方案 »

  1.   

    Myv.get(i)==null 
    ->
    Myv.get(i)!=null
      

  2.   

    Myv.get(i)==null || Myv.get(i).toString().substring(0,1).equals("\n"))
    ->
    Myv.get(i)!=null && Myv.get(i).toString().substring(0,1).equals("\n"))=======
    还是这样??楼主说说你想删什么呀
      

  3.   

    trimToSize
    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())。
      

  4.   

    从list里面遍历删除一定要从大到小的删除
    for(int i=list.size()-1;i>=0;i++){
      list.remove(i);
    }切记切记
      

  5.   


    相法:Myv.get(i)为null或者为"\n",则删除这个元素。那里错了啊!
      

  6.   

    to:fool_leave() 我开始也是这样的写的,但是它把我的ArrayList里面的元素都给改了,不知道什么原因。另处你里面的for(int i=list.size()-1;i>=0;i++)应该是i--吧!
      

  7.   

    add
    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 - 最后一个要移除的元素后面那个元素的索引。
      

  8.   

    Myv.get(i)==null 
    什么意思?删掉null的?
      

  9.   

    zzmdegm(剑心) ( ) 信誉:100    Blog  2006-12-05 12:32:14  得分: 0  
     
       晕
    相法:Myv.get(i)为null或者为"\n",则删除这个元素。那里错了啊!
    ===================
    你确信Myv里面有符合条件的元素么
      
     
      

  10.   

    首先,删除动作必须从高往低。(i--,写错了)至于你说的吧元素改了肯定是别的问题。先别搞那么复杂的判断,不要用substring,你连长度都没有检测就这样用会报错的。用startsWith等安全的方法来判断
      

  11.   

    Myv.get(i).toString().substring(0,1).equals("\n"))
    越看越奇怪,你怎么知道0位置是"\n"呢,你的判断一定有问题。换行在windows下面可能是"\r\n"
      

  12.   

    to:malligator(不能再整天泡在CSDN里了!) 
    有啊,我在断点里面都看到了啊,Myv里面有“null”、“\n”、还有其它字符
      

  13.   

    to:fool_leave() 
    有可能,所以才用或者啊!
      

  14.   

    汗!突然看出来了
    你在ArrayList里存的是String吧
    =========================
    试试:
    Myv.get(i).toString().substring(0,1).equals("\n"))
    ->
    ((String)Myv.get(i)).substring(0,1).equals("\n")) 
      

  15.   

    to:malligator(不能再整天泡在CSDN里了!) 是用dom从XML中取出的数据,是String类型。
    String)Myv.get(i))和Myv.get(i).toString()有什么很大的区别吗
      

  16.   

    没有区别你把for循环先改过来,至少这个是一个bug然后看看有什么问题,调试一下,看看你的if语句判断的结果是不是和你想的一样。如果不一样就打印出来检查
      

  17.   

    to:fool_leave() 你的说法有岐意,你是说
    for(int i=list.size()-1;i>=0;i++){
      list.remove(i);
    }
    它是正确的还是说
    for(int i=list.size()-1;i>=0;i--){
      list.remove(i);
    }
    是正确的啊!
      

  18.   

    zzmdegm(剑心) ( ) 信誉:100    Blog  2006-12-05 12:48:43  得分: 0  有啊,我在断点里面都看到了啊,Myv里面有“null”、“\n”、还有其它字符
     =======================
    那真就看不出来是哪的问题了不会是取出来的时候, null变成了“null”,"\n"变成了“\\n”??
    前者你试试Myv.get(i).toString().equals("null"))
    后者你试试Myv.get(i).toString().substring(0,1).equals("\\"))
    看删没删?
     
      

  19.   

    最方便的删除:
    static void filter(Collection<?> c) {
        for (Iterator<?> it = c.iterator(); it.hasNext(); )
            if (!cond(it.next()))
                it.remove();
    }
      

  20.   

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

  21.   

    说这么多不如debug一下~~
    LZ应该学会Debug……
      

  22.   

    最好不要remove 可以新建一个arraylist 然后把需要的加入
      

  23.   

    figoren(figoren)讲一下不要 remove的原因
      

  24.   


    Array XXX=new Array();
    移到循环中去试试