using System.Collections.Generic;
public static void Main()
string inputString = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eget enim id purus ultrices aliquet. Sed in nisi in metus sodales pretium. Fusce varius augue id justo scelerisque bibendum. Nam gravida suscipit enim, non vulputate risus fermentum nec. Nullam vel nisi at odio scelerisque convallis nec nec justo. Vivamus elementum sapien eu risus venenatis, non vestibulum nulla consectetur. Duis dictum tempor urna, vitae fermentum nisi rhoncus non. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam convallis tellus sit amet dolor sollicitudin dictum.";
string[] substrings = SplitStringByWord(inputString, 57);
foreach (string substring in substrings)
Console.WriteLine(substring);
static string[] SplitStringByWord(string input, int maxLength)
List<string> substrings = new List<string>();
StringBuilder currentSubstring = new StringBuilder();
string[] words = input.Split(' ');
foreach (string word in words)
if ((currentSubstring.Length + word.Length + 1) <= maxLength)
if (currentSubstring.Length > 0)
currentSubstring.Append(" ");
currentSubstring.Append(word);
substrings.Add(JustifyText(currentSubstring.ToString(), maxLength));
currentSubstring.Clear();
currentSubstring.Append(word);
substrings.Add(JustifyText(currentSubstring.ToString(), maxLength));
return substrings.ToArray();
static string JustifyText(string text, int length)
string[] words = text.Split(' ');
int wordCount = words.Length - 1;
int totalSpaces = length - text.Length;
StringBuilder justifiedText = new StringBuilder();
justifiedText.Append(words[0]);
justifiedText.Append(' ', totalSpaces);
return justifiedText.ToString();
int additionalSpaces = totalSpaces / wordCount;
int extraSpaces = totalSpaces % wordCount;
for (int i = 0; i < words.Length - 1; i++)
justifiedText.Append(words[i]);
justifiedText.Append(' ', additionalSpaces + 1);
justifiedText.Append(' ');
justifiedText.Append(words[words.Length - 1]);
return justifiedText.ToString();