如何仅使用非前导零复制int数组
我有一个 int 数组,它几乎没有前导零。我想将此数组复制到另一个不带前导零的 int 数组中。
这是我写的代码。但此代码仅复制非零整数。
原始数组:
int samples[]= {0, 0, 0, 0, 0, 40, 0, 2532, 17, -2300, -17, -4000, 0, 2000, 1048, -420, 33, 15, -32, 2030, 3223, 0, 0};
新数组应该是:
int noleadingzeroarray[] = {40,0,2532, 17, -2300, -17, -4000, 0, 2000, 1048, -420, 33, 15, -32, 2030, 3223, 0, 0};
代码:
public static void trimSilenceFromBeginning(){
int leadingZeros = 0;
int samples[]= {0, 0, 0, 0, 0, 40, 0, 2532, 17, -2300, -17, -4000, 0, 2000, 1048, -420, 33, 15, -32, 2030, 3223, 0, 0};
int noleadingzeroarray[]= new int[samples.length];
int zeroscounter= 0;
boolean nonzeroencountered = false;
if(samples[leadingZeros] == 0) {
leadingZeros++;
}
for(int j= 0; j< samples.length; j++){
if(samples[j]!=0 ) {
noleadingzeroarray[zeroscounter] = samples[j];
zeroscounter++;
}
}
System.out.println(Arrays.toString(noleadingzeroarray));
}
}
回答
Arrays.copyOfRange只使用arrays不涉及其他元素(集合等)。
将指定数组的指定范围复制到新数组中。范围 (from) 的初始索引必须介于零和 original.length 之间,包括 0 和 original.length。
3 行:
int start;
for (start = 0; start < samples.length && samples[start] == 0; start++) {}
int[] noleadingzeroarray = Arrays.copyOfRange(samples, start, samples.length);
- 如果在 中找不到零
samples,start则将是0-整个数组将被浅复制 - 如果找到前导零,
start将在最后一个零位置之后分配起始索引。-一个子数组将被浅复制
不要对浅拷贝术语感到恐慌,它们是整数(原语)。没问题。