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;
}
asked Nov 17, 2012 at 23:11
-
I'm somewhat confused here. What is a sample input, and a sample output?PearsonArtPhoto– PearsonArtPhoto2012年11月17日 23:14:41 +00:00Commented Nov 17, 2012 at 23:14
-
How did this not get closed? Double DuplicateEdward J Beckett– Edward J Beckett2012年11月17日 23:57:12 +00:00Commented Nov 17, 2012 at 23:57
2 Answers 2
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;
}
answered Nov 17, 2012 at 23:19
-
Thank you. Still a little confused though... Do I then call generalConcatAll 4 times and pass in each jobs array?Tríona Lounds– Tríona Lounds2012年11月17日 23:23:09 +00:00Commented Nov 17, 2012 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– Tríona Lounds2012年11月17日 23:24:30 +00:00Commented Nov 17, 2012 at 23:24
-
No. The body of
concatAll
method gives you the anwer - you pass each job array as a seperate argument.ShyJ– ShyJ2012年11月17日 23:24:54 +00:00Commented Nov 17, 2012 at 23:24 -
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;
}
answered Mar 13, 2014 at 14:53
lang-java