I didn’t like any of the solutions floating around the web for displaying blocks of text wrapped at word boundaries, so I wrote one.
This:
This is a really long line of text that shoul
dn't be wrapped mid-word, but is
Becomes this:
This is a really long line of text that
shouldn't be wrapped mid-word, but is
Here it is:
public static string GetWordWrappedParagraph(string paragraph)
{
if (string.IsNullOrWhiteSpace(paragraph))
{
return string.Empty;
}
var approxLineCount = paragraph.Length / Console.WindowWidth;
var lines = new StringBuilder(paragraph.Length + (approxLineCount * 4));
for (var i = 0; i < paragraph.Length;)
{
var grabLimit = Math.Min(Console.WindowWidth, paragraph.Length - i);
var line = paragraph.Substring(i, grabLimit);
var isLastChunk = grabLimit + i == paragraph.Length;
if (isLastChunk)
{
i = i + grabLimit;
lines.Append(line);
}
else
{
var lastSpace = line.LastIndexOf(" ", StringComparison.Ordinal);
lines.AppendLine(line.Substring(0, lastSpace));
//Trailing spaces needn't be displayed as the first character on the new line
i = i + lastSpace + 1;
}
}
return lines.ToString();
}