Спасибо за подсказку, сделал себе для этого расширение.
Кому нужно, ловите:
Код
public static class StringExtensions {
/// <summary>
/// Разделяет строку на несколько строк не превышая заданное количество символов в каждой строке
/// </summary>
/// <param name="text">Строка для деления</param>
/// <param name="charsInString">Максимальное количество символов в каждой строке</param>
/// <returns>Список строк, разделённых по символам</returns>
public static List<string> SplitByCharacters(this string text, int charsInString) {
// Список, куда будут складываться разделённые строки
List<string> strings = new();
// Если количество символов в исходной строке меньше или равно максимальному количеству символов, то вернуть список только с этой строкой
if (text.Length <= charsInString) {
strings.Add(text);
return strings;
}
// Разделяем исходную строку на список слов из строки
List<string> words = text.Split(" ", charsInString).ToList();
while (true) {
// Строка, в которую будут собираться слова
string readyText = "";
while (words.Count > 0) {
// Защита от бесконечного цикла
if (words[0].Length > charsInString) throw new ArgumentOutOfRangeException(nameof(words), "Количество символов в слове превышает максимальное количество букв в строке.");
// Добавляем слово с пробелом к строке
readyText += $"{words[0]} ";
// Убираем слово из списка слов
words.Remove(words[0]);
// Если слов не осталось, или если следующее слово превысит лимит букв, то прерываем сборку текущей строки
if (words.Count <= 0 || readyText.Length + words[0].Length > charsInString) break;
}
// Добавляем строку в список строк
strings.Add(readyText);
// Если слов не осталось - возвращаем список строк
if (words.Count <= 0) return strings;
}
}
}
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Кому нужно, ловите: