Appending Integer array elements in Java

17,291

Solution 1

It's pretty straighforward:

// Assuming a.length % 5 == 0.
int[] b = new int[a.length / 5];
for (int i = 0; i < a.length; i += 5) {
    b[i/5] = a[i]*10000 + a[i+1]*1000 + a[i+2]*100 + a[i+3]*10 + a[i+4];
}

Solution 2

This sounds like a homework question, so I won't give you the complete solution, but the basic rundown is:

  1. Compute the length of b: len = a.length / 5
  2. Construct b with that many elements.
  3. Initialize an index variable to point to the first element in a
  4. For each element in b:
    • Construct the value for that element from a[idx]...a[idx+4]
    • Advance the index into a by 5.

Also note that you may need to verify that the input a is actually a multiple of 5 in length.

Solution 3

This works with (a.length % 5) != 0, and keeps leading zeroes (by storing digits into String).

    int a[]={2,0,1,0,1,1,0,2,1,1,1,0,1,0,1,0,0,7};

    final int N = 5;
    String b[] = new String[(a.length + N - 1)/ N];
    StringBuilder sb = new StringBuilder(N);
    int x = 0;
    for (int i = 0; i < b.length; i++) {
        sb.setLength(0);
        for (int k = 0; k < N && x < a.length; k++) {
            sb.append(a[x++]);
        }
        b[i] = sb.toString();
    }
    System.out.println(java.util.Arrays.toString(b));
    // prints "[20101, 10211, 10101, 007]"

Alternately, you can also use regex:

    String[] arr =
        java.util.Arrays.toString(a)
        .replaceAll("\\D", "")
        .split("(?<=\\G.{5})");
    System.out.println(java.util.Arrays.toString(arr));
    // prints "[20101, 10211, 10101, 007]"

Basically this uses Arrays.toString(int[]) to append all digits into one long String, then removes all non-digits \D, then uses \G-anchored lookbehind to split every .{5}

Share:
17,291
Mohammad Sepahvand
Author by

Mohammad Sepahvand

Updated on June 04, 2022

Comments

  • Mohammad Sepahvand
    Mohammad Sepahvand almost 2 years

    I have an array, say

    int a[]={2,0,1,0,1,1,0,2,1,1,1,0,1,0,1};
    

    I need to append each of the 5 neighboring elements and assign them to a new array b with length=(a.length/5); and i want to append the 5 neighboring elements so that I have: int b[]={20101,10211,10101}; I need to do this for various length arrays, in most cases with length of a being greater than 15.

    Any help would be greatly appreciated, I'm programming in Java.

    Thanks in advance.