This is exactly what substring does...
static String[] split(String source, int ... sizes){
  int n = source.length(), start = 0;
  String [] partials = new String[sizes.length];
  for(int i = 0; i < sizes.length; i++){
    int end = sizes[i] < 0 ? n : start + sizes[i];
    partials[i] = source.substring(start, start = end);
  }
  return partials;
}
One thing you need to do is translate rest to -1, for example:
static String[] split(String source, String sizes){
  return split(source, Arrays.stream(sizes.split(","))
                    .mapToInt(it -> it.equals("rest") ? -1 : Integer.parseInt(it))
                    .toArray());
}
Then you can use split(String, String) to achieve your ways, for example:
String string = "AAABBB CCDDD    FFGGGHHHI     KKK"; 
String definition = "2,6,3,1,6,7,rest";
String[] results = split(string, definition);
//        ^--- ["AA", "ABBB C", "CDD", "D", "    FF", "GGGHHHI", "     KKK"]