Your current code allocates several objects on the heap even though it doesn't need to. A string, a character array and several character objects.

Puzzles like this can often be solved not by inspecting the individual bits but by processing them in parallel. An alternative approach is:

To find the binary gap of n:

* Discard all trailing zeros.
* As long as n does not consist of 1s only:
    * Combine n with n shifted to the right by one place.
* The number of repetitions is the length of the largest gap.

Taking 1000010001000 as an example:

    1000010001
    1100011001
    1110011101
    1111011111
    1111111111

It took 4 steps, therefore the binary gap is 4.

In Java, this code becomes (typed off my head, so there may be typos):

    public static binaryGap(int n) {
        n >>>= Integer.numberOfTrailingZeros(n);
        int steps = 0;
        while ((n & (n + 1)) != 0) {
            n |= n >>> 1;
            steps++;
        }
        return steps;
    }