如何拼接多个Java String数组?现有拼接代码填充数组错误如何修正?
问题分析
- 核心逻辑错误:
System.arraycopy的第四个参数(目标数组的起始写入位置)设置错误。你当前传入的是前一个数组的单独长度,仅在合并2个数组时能正常工作,合并3个及以上数组时,写入位置没有累计前面所有数组的总长度,会出现内容覆盖、数据丢失的问题。 - 边界异常风险:没有处理传入的
arrays为空列表的情况,此时调用arrays.get(0)会直接抛出IndexOutOfBoundsException。
修正后的代码
import java.util.ArrayList; import java.util.Arrays; private static String[] concat(ArrayList<String[]> arrays) { // 处理空列表边界 if (arrays.isEmpty()) { return new String[0]; } int totalLength = 0; for (String[] array : arrays) { totalLength += array.length; } String[] result = new String[totalLength]; // 记录当前写入的起始偏移量 int currentOffset = 0; for (String[] array : arrays) { System.arraycopy(array, 0, result, currentOffset, array.length); currentOffset += array.length; } return result; }
修正说明
- 新增空列表判断,避免索引越界异常
- 新增
currentOffset变量累计已写入的总长度,每次复制数组时将该值作为目标起始位置,复制完成后累加当前数组的长度,保证后续写入位置正确 - 简化循环逻辑,不需要单独处理第一个数组,所有数组统一走复制逻辑,减少出错概率
内容的提问来源于stack exchange,提问作者ShiningLea
相关产品推荐
相关产品推荐

