Split a string, at every nth position

For a big performance improvement, an alternative would be to use substring() in a loop:

public String[] splitStringEvery(String s, int interval) {
    int arrayLength = (int) Math.ceil(((s.length() / (double)interval)));
    String[] result = new String[arrayLength];

    int j = 0;
    int lastIndex = result.length - 1;
    for (int i = 0; i < lastIndex; i++) {
        result[i] = s.substring(j, j + interval);
        j += interval;
    } //Add the last bit
    result[lastIndex] = s.substring(j);

    return result;
}

Example:

Input:  String st = "1231241251341351452342352456"
Output: 123 124 125 134 135 145 234 235 245 6.

It’s not as short as stevevls’ solution, but it’s way more efficient (see below) and I think it would be easier to adjust in the future, of course depending on your situation.


Performance tests (Java 7u45)

2,000 characters long string – interval is 3.

split("(?<=\\G.{" + count + "})") performance (in miliseconds):

7, 7, 5, 5, 4, 3, 3, 2, 2, 2

splitStringEvery() (substring()) performance (in miliseconds):

2, 0, 0, 0, 0, 1, 0, 1, 0, 0

2,000,000 characters long string – interval is 3.

split() performance (in miliseconds):

207, 95, 376, 87, 97, 83, 83, 82, 81, 83

splitStringEvery() performance (in miliseconds):

44, 20, 13, 24, 13, 26, 12, 38, 12, 13

2,000,000 characters long string – interval is 30.

split() performance (in miliseconds):

103, 61, 41, 55, 43, 44, 49, 47, 47, 45

splitStringEvery() performance (in miliseconds):

7, 7, 2, 5, 1, 3, 4, 4, 2, 1

Conclusion:

The splitStringEvery() method is a lot faster (even after the changes in Java 7u6), and it escalates when the intervals become higher.

Ready-to-use Test Code:

pastebin.com/QMPgLbG9

Leave a Comment