@pinguine

Java. Как равномерно распределить пробелы, чтобы строка стала заданной длины?

Как равномерно распределить пробелы для того, чтобы строка стала нужной длины? Пробелы надо не добавлять в конец строки, а ставить их между словами.
  • Вопрос задан
  • 914 просмотров
Решения вопроса 1
@bedward70
Добрый день, всем!
Понравилась задачка, написал:
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();
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
evgeniy8705
@evgeniy8705
Повелитель вселенной
собрать коллекцию слов, посчитать сумму длин всех слов, вычислить недостающую длину, поделить сумму всех слов - 1 на недостающую длину, взять целую часть, добавить после каждого слова с 0 позиции до N - 1 (целую часть) пробелов, остаток от вычислений умножить на N - 1, потом либо рандомно расставить остальные пробелы либо просто пройтись с 0 позиции и расставить по 1 пробелу после слова, в итоге собрать строку. более менее равномерно получиться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы