Добрый день, всем!
Понравилась задачка, написал:
package ru.bedward70.toster.q440809;
public class App {
public static void main(String[] args) {
final String origin = "Мама мыла раму!";
final String result = addSpaces(origin, 20);
System.out.println(" 12345678901234567890123456789012345678901234567890");
System.out.println("Origin: " + origin);
System.out.println("Result: " + result);
}
private static final String DELIMITER = " ";
private static String addSpaces(String origin, int count) {
// Validation | проверка от зацикливания
if (origin.indexOf(DELIMITER) == -1) {
throw new RuntimeException("No \"" + DELIMITER + "\" in \"" + origin + "\" string");
}
// work Buffer | Рабочий буфер
final StringBuilder sb = new StringBuilder(origin);
// Delimiter Point | Указатель, где происходит поиск делимитера
int point = 0;
// Cycle | Пока не набьем нужную длину
while (sb.length() < count) {
int index = sb.indexOf(DELIMITER, point);
// end text | Если конец текста, то начинаем с начала
if (index == -1) {
point = 0;
continue;
}
// is next the delimiter? | Если не последний делимитер в последовательности делимитеров, то это не наш случай - пропускаем
point = index + DELIMITER.length();
if (point == sb.indexOf(DELIMITER, point)) {
continue;
}
// Add delimiter | Нашли последний делимитер в последовательности делимитеров, то добавляем
sb.replace(point, point, DELIMITER);
point += DELIMITER.length();
}
return sb.toString();
}
}