Problem
I have this code that duplicates a byte array 5 times.
class Multiple {
public static void main(String[] args) {
byte[] result = new byte[] {0x41,0x42,0x43,0x44};
int len = result.length;
byte[] multipled = new byte[len*5];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < len; j++) {
multipled[i*len + j] = result[j];
}
}
System.out.println(new String(multipled));
System.out.println(new String(result));
}
}
Example:
ABCDABCDABCDABCDABCD ABCD
The code uses multiple loops and assignment, can it be better or shorter?
Solution
It can be made shorter:
public static void main(String[] args) {
byte[] result = new byte[] {0x41, 0x42, 0x43, 0x44};
byte[] multipled = new byte[result.length * 5];
for (int i = 0; i < multipled.length; i++)
multipled[i] = result[i % result.length];
...
}
This operation is worth defining as a function for clarity and reuse.
To copy an array, use System.arraycopy()
.
public static byte[] repeat(byte[] array, int times) {
byte[] repeated = new byte[times * array.length];
for (int dest = 0; dest < repeated.length; dest += array.length) {
System.arraycopy(array, 0, repeated, dest, array.length);
}
return repeated;
}