Если вы сначала рассчитаете размер детали, вы можете легко рассчитать диапазоны деталей.
public static String[] partitionByCount(String input, int count) {
if (count <= 0)
throw new IllegalArgumentException("Invalid count: " + count);
int size = input.length() / count;
if (size * count != input.length())
throw new IllegalArgumentException("String of length " + input.length() +
" cannot be split into " + count + " equally-sized parts");
String[] parts = new String[count];
for (int i = 0; i < count; i++)
parts[i] = input.substring(i * size, (i + 1) * size);
return parts;
}
Тест
System.out.println(Arrays.toString(partitionByCount("009056737152", 2)));
System.out.println(Arrays.toString(partitionByCount("009056737152", 3)));
System.out.println(Arrays.toString(partitionByCount("009056737152", 4)));
Выход
[009056, 737152]
[0090, 5673, 7152]
[009, 056, 737, 152]
Если вы хотите указать размер раздела вместо счетчика разделов, код легко настраивается:
public static String[] partitionBySize(String input, int size) {
if (size <= 0)
throw new IllegalArgumentException("Invalid size: " + size);
int count = input.length() / size;
if (count * size != input.length())
throw new IllegalArgumentException("String of length " + input.length() +
" cannot be split into equally-sized parts of length " + size);
String[] parts = new String[count];
for (int i = 0; i < count; i++)
parts[i] = input.substring(i * size, (i + 1) * size);
return parts;
}
Тест
System.out.println(Arrays.toString(partitionBySize("009056737152", 2)));
System.out.println(Arrays.toString(partitionBySize("009056737152", 3)));
System.out.println(Arrays.toString(partitionBySize("009056737152", 4)));
Выход
[00, 90, 56, 73, 71, 52]
[009, 056, 737, 152]
[0090, 5673, 7152]
Чтобы затем суммировать перевернутые части, было бы проще изменить вход, разделить его, а затем сложить:
public static int sumReversedPartitions(String input, int size) {
String reversed = new StringBuilder(input).reverse().toString();
String[] parts = partitionBySize(reversed, size);
return Arrays.stream(parts).mapToInt(Integer::parseInt).sum();
}
Тест
System.out.println(sumReversedPartitions("009056737152", 2));
System.out.println(sumReversedPartitions("009056737152", 3));
System.out.println(sumReversedPartitions("009056737152", 4));
Выход
153 // 25 + 17 + 37 + 65 + 09 + 00
2538 // 251 + 737 + 650 + 900
7182 // 2517 + 3765 + 0900