我是想去掉数组中不要的部份
比如
int[] a = {1,2,3,7,2,0,0,0,0};
怎么能够把后面0去掉得到下面的数组?
int[] b = {1,2,3,7,2};

解决方案 »

  1.   

    确定最后一个非0数的位置。
    创建一个新数组,copy
      

  2.   

    有专门的函数啊 !!
    可以去查文档啊!
    先把数组转换成字符串,用arrays.toString();
    然后用
    substring(int beginIndex, int endIndex) 
    就能得到结果了!!
      

  3.   

    试一试,顺便学习/**
     * 我是想去掉数组中不要的部份 
      比如 
      int[] a = {1,2,3,7,2,0,0,0,0}; 
      怎么能够把后面0去掉得到下面的数组? 
      int[] b = {1,2,3,7,2};  * */
    package csdn.question.myanswer;public class DeleteZero {
    public static void main(String[] args) {
    int[] arr = {1,2,0,1,1,0,0,0,0,0,0,0,0,0};

    int index = 0;//标记后面有多少个连续的0
    for (int i = arr.length - 1; i >= 0; i--) {
    if(arr[i] != 0) {
    break;
    }
    index++;
    }

    int[] arrNew = new int[arr.length - index];
    for(int i = 0; i < arr.length - index; i++) {
    arrNew[i] = arr[i];
    }

    for (int i : arrNew) {
    System.out.println(i);
    }
    }
    }
      

  4.   

    如果事先就知道a的位置的话用这段code
    public static void main(String[] args) {
    int[] a = {1,2,3,7,2,0,0,0,0}; 
    int[] b=new int[5];      
                     参数(要拷贝的数组源,拷贝的开始位子,要拷贝的目标数字,填写的开始位子,拷贝的长度)
    System.arraycopy(a, 0, b, 0, 5);

    }
      

  5.   

    把数组转换成字符串,substring(int beginIndex, int endIndex)
      

  6.   

    方法很多,最简单就是循环把每个元素copy
      

  7.   

    System.arraycopy(src, srcPos, dest, destPos, length)
      

  8.   

    不用新数组
    读原数组加判断
    if(idx<n+1)
       a[idx];
      

  9.   

    把数组转换成List容器类操作,操作完了再转成数组
      

  10.   

    没错 就是 copy
    System.arraycopy(src, srcPos, dest, destPos, length)
      

  11.   

    如果数组中重复的元素出现没有规律的话,用System.arraycopy()估计就不行了
      

  12.   


    public int[] getSubArray(int n) {
    int[] a = {1,2,0,1,1,0,0,0,0,0,0,0,0,0};
    int index = 0;
    for(int i = a.length -1;i > 0;i--) {
    if(n != a[i]) {
    index = i + 1;
    break;
    }
    }
    int[] b = new int[index];
    for(int i = 0; i < index; i++) {
                b[i] = a[i];
            }
    return b;
    }个人认为直接操作数组是效率最快的,如果转为String,再对其处理,最后同样要做相似的操作,反而会影响效率!
      

  13.   

    UP一下
    楼主的问题前几天刚解决,方法和SF的方法一样
      

  14.   

    import java.util.Arrays;public class ArrayUtil { public static int[] trimIntArray(int[] a) {
    if (a == null) throw new NullPointerException("argument a is null");
    if (a.length == 0) return a;
    int i = a.length - 1;
    while (a[i] == 0 && --i >= 0);
    if (i == -1) return new int[0];
    //before JavaSE6.0
    //int[] r = new int[i + 1];
    //System.arraycopy(a, 0, r, 0, i + 1);
    //return r;
    //JavaSE6.0
    return Arrays.copyOf(a, i + 1);
    } public static void main(String[] args) {
    int[] test = {1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0};
    //test = new int[] {0, 0, 0, 0, 0};
    test = trimIntArray(test);
    //before JavaSE5.0
    //for (int i = 0; i < test.length;) System.out.print(test[i++] + " ");
    //JavaSE5.0
    System.out.println(Arrays.toString(test)); }}
      

  15.   

    public static int[] copyOfRange(int[] original,int from,int to)
    将指定数组的指定范围复制到一个新数组。该范围的初始索引 (from) 必须位于 0 和 original.length(包括)之间。original[from] 处的值放入副本的初始元素中(除非 from == original.length 或 from == to)。原数组中后续元素的值放入副本的后续元素。该范围的最后索引 (to)(必须大于等于 from)可以大于 original.length,在这种情况下,0 被放入索引大于等于 original.length - from 的副本的所有元素中。返回数组的长度为 to - from。
      

  16.   

    System.arrayCopy不支持int[],必须是Object[]
    不过有办法了