Java中如何合并字符串数组

9

我想知道如何在Java中连接4个字符串数组。

已经有一个关于这个问题的提问了。 如何在Java中连接两个数组?

但是我尝试复制它,但它对我不起作用。

这是我的代码:

调用方法:

concatAll(jobs1, jobs2, jobs3, jobs4);

该方法本身:
public String[] concatAll(String[] jobsA, String[] jobsB, String[] jobsC, String[] jobsD) {
    int totalLength = jobsA.length;
    for (String[] array : jobsD) {
        totalLength += array.length;
    }

    String[] result = Arrays.copyOf(jobsA, totalLength);

    int offset = jobsA.length;

    for (String[] array : jobsD) {
        System.arraycopy(array, 0, result, offset, array.length);
        offset += array.length;
    }
    return result;
}

我有点困惑。什么是样本输入和样本输出? - PearsonArtPhoto
这个问题为什么没有被关闭?Double Duplicate - Edward J Beckett
2个回答

16

不考虑检查数组是否为 null 等事项,您可以创建一个通用方法,并在特定情况下使用它,如下所示:

    public String[] concatAll(String[] jobsA, String[] jobsB, String[] jobsC, String[] jobsD) 
    {
        return generalConcatAll (jobsA, jobsB, jobsC, jobsD);
    }

    public String[] generalConcatAll(String[]... jobs) {
        int len = 0;
        for (final String[] job : jobs) {
            len += job.length;
        }

        final String[] result = new String[len];

        int currentPos = 0;
        for (final String[] job : jobs) {
            System.arraycopy(job, 0, result, currentPos, job.length);
            currentPos += job.length;
        }

        return result;
    }

谢谢。不过还是有点困惑...那我是要调用 generalConcatAll 四次,然后分别传入每个 jobs 数组吗? - Tríona Lounds
还是我只需调用一次并为每个作业数组运行4次for循环呢? - Tríona Lounds
不需要解释,concatAll 方法的主体已经给出了答案——你需要将每个作业数组作为单独的参数传递。 - ShyJ
@TríonaLounds 你可能想要阅读关于Varargs的内容。 - nkr

4

这是更简洁的方式,使用Apache Commons Lang库正确处理所有null情况。使用ArrayUtils.addAll(T[], T...)方法。

public String[] generalConcatAll(String[]...arrays) {

    String[] result = null;

    for(String[] array : arrays) {
         result = ArrayUtils.addAll(result, array);
    }

    return result;

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接