The trick is to use a look-behind with the regex \G
, which means "end of previous match":
String[] parts = str.split("(?<=\\G.{8})");
The regex matches 8 characters after the end of the last match. Since in this case the match is zero-width, we could more simply say "8 characters after the last match".
Conveniently, \G
is initialized to start of input, so it works for the first part of the input too.