Мне недавно пришлось сделать что-то похожее на Java. Сам код относительно прост. То, что я нашел, заняло больше всего времени, так это обдумал процесс оправдания.
Я начал с пошагового процесса выравнивания текста вручную.
- Узнайте, как долго линия
- Узнайте, какова длина строки в указанной строке
- Рассчитать количество пробелов, необходимых для добавления к строке, чтобы она равнялась длине строки
- Узнайте, сколько пробелов между словами в строке
- Вычислить, сколько пробелов добавить к каждому пробелу в строке
- Добавить результат к каждому разрыву
- Подсчитайте, сколько дополнительных пробелов нужно добавить к каждому пробелу последовательно (если количество пробелов не делится на количество пробелов, которые нужно добавить. Например, если у вас есть 5 пробелов и 6 пробелов для добавления)
- Добавить лишние пробелы к пробелам
- Преобразование пробелов в подчеркивания
- Возвращаемая строка
Делая это, я стал намного проще кодировать алгоритм!
Определение длины строки и строки в указанной строке
Вы сказали, что прочитали длину строки и текст в строке, поэтому 1 и 2 вы уже сделали. 2 - простой string.length()
вызов.
Вычисление количества пробелов, необходимых для добавления к строке, чтобы она равнялась длине строки, - это просто взятие длины строки и вычитание длины строки.
lineLength - string.length() = noofspacestoadd;
Определение количества пробелов между всеми словами в строке
Вероятно, есть несколько способов сделать это. Я обнаружил, что самым простым способом сделать это было преобразование строки в тип char [], а затем итерация символов, проверяющих '', и установка счетчика для случаев, когда он находит ''
Расчет количества пробелов для добавления к каждому пробелу
Это простой расчет деления!
noofgaps / noofspacestoadd = noofspacestoaddtoeachgap;
Примечание: вы должны убедиться, что вы делаете это деление с целыми числами! При 5/2 = 2,5, поэтому вы ЗНАЕТЕ, что вы должны добавить 2 пробела к каждому пробелу между словами, а деления с использованием int пресекают десятичное число в целое число.
Добавьте результат к каждому разрыву
Прежде чем вы сможете добавить количество строк, необходимое для добавления к каждому пробелу, вам нужно преобразовать это число в строку пробелов. Таким образом, вам нужно написать метод для преобразования заданного целого числа в строку пробелов, равную этому заданному числу. Опять же, это можно сделать по-разному. То, как я это сделал, было что-то вроде этого
String s = "";
for(int i=noofspacestoaddtoeachgap; i>0; i--)
{
s+= " ";
}
return s;
То, как я это сделал, было преобразовать строку в массив подстрок, причем подстроки были каждым словом в массиве. Если вы посмотрите на класс String в javadoc, вы должны найти методы в классе String, которые вы можете использовать для этого!
Если у вас есть массив подстрок, вы можете добавить строку пробелов в конец каждой подстроки, чтобы сформировать новую подстроку!
Расчет количества лишних пробелов
Это опять простой расчет. Используя оператор%, вы можете выполнить деление остатка аналогично делению, которое мы делали ранее.
noofgaps % noofspacestoadd = noofspacestoaddtoeachgap;
Результат этого вычисления дает нам количество лишних пробелов, необходимых для выравнивания текста.
Добавлять дополнительные пробелы последовательно к каждому пробелу
Это, пожалуй, самая сложная часть алгоритма, поскольку вам нужно выработать способ перебора каждого пробела между словами и добавить дополнительный пробел, пока не останется больше лишних пробелов для добавления!
Возвращаемая строка
return String;