9

I'm wondering how I can concatenate 4 string arrays in Java.

There is a question about this already. How can I concatenate two arrays in Java?

But I tried to replicate it but it does not work for me.

This is what my code looks like:

Calling the method:

concatAll(jobs1, jobs2, jobs3, jobs4);

The method itself:

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;
}
Community
  • 1
  • 1
Tríona Lounds
  • 101
  • 1
  • 1
  • 3

2 Answers2

16

Putting aside things like checking if an array is null, you can create a general method for it and use it in your specific case, like this:

    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;
    }
ShyJ
  • 4,560
  • 1
  • 19
  • 19
  • Thank you. Still a little confused though... Do I then call generalConcatAll 4 times and pass in each jobs array? – Tríona Lounds Nov 17 '12 at 23:23
  • Or do I call it once and run the for loops 4 times once for each of the jobs arrays? – Tríona Lounds Nov 17 '12 at 23:24
  • No. The body of `concatAll` method gives you the anwer - you pass each job array as a seperate argument. – ShyJ Nov 17 '12 at 23:24
  • @TríonaLounds You might want to read about [Varargs](http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html). – nkr Nov 17 '12 at 23:25
4

This is a bit more concise, and handles all null cases correctly using Apache Commons Lang library. ArrayUtils.addAll(T[], T...)

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

    String[] result = null;

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

    return result;

}
yoni
  • 5,686
  • 3
  • 27
  • 28