You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将数组中的0替换为另一个数组的元素

数组0元素按位替换实现方案

你给出的场景中,数组a尾部的连续0数量和数组b的长度完全匹配,只需要把b的元素按顺序填入a的0位置即可,有两种常用实现方式:

1. 基础循环实现(逻辑直观,无特殊API依赖)

核心思路是先找到a中第一个待替换的0的下标,再遍历b把元素挨个填到对应位置,代码如下:

import java.util.Arrays;
public class Main
{
public static void main(String[] args) {
    int[] a = {1,2,3,0,0,0};
    int[] b = {7,9,13};
    
    // 定位第一个0的位置
    int startPos = 0;
    for (int i = 0; i < a.length; i++) {
        if (a[i] == 0) {
            startPos = i;
            break;
        }
    }
    // 逐位替换
    for (int i = 0; i < b.length; i++) {
        a[startPos + i] = b[i];
    }
    
    System.out.println(Arrays.toString(a)); 
    // 输出结果:[1, 2, 3, 7, 9, 13]
}
}

2. JDK原生方法实现(代码简洁,性能更好)

可以直接用JDK自带的System.arraycopy方法做数组拷贝,这个方法是底层native实现,处理大数组时性能比手写循环高,代码如下:

import java.util.Arrays;
public class Main
{
public static void main(String[] args) {
    int[] a = {1,2,3,0,0,0};
    int[] b = {7,9,13};
    
    // 针对尾部连续0的场景,直接计算替换起始位置
    int startPos = a.length - b.length;
    // 参数顺序:源数组、源数组拷贝起始下标、目标数组、目标数组写入起始下标、拷贝元素长度
    System.arraycopy(b, 0, a, startPos, b.length);
    
    System.out.println(Arrays.toString(a));
    // 输出结果:[1, 2, 3, 7, 9, 13]
}
}

注意点

  • 以上两种写法默认适配你给出的「数组a尾部连续0的数量等于数组b长度」的场景,如果0不是连续排在a的尾部,不要直接用长度差计算起始位置,遍历a时按顺序遇到0就替换即可
  • 正式使用时建议加一层长度校验,确认待替换的0的数量和b的长度匹配,避免抛出ArrayIndexOutOfBoundsException

内容的提问来源于stack exchange,提问作者dilip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:45:44