regex and splitting

CSharp · Console

/Program.cs

using System;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
					
public class Program
{
	public static void Main()
	{
        string Lines = " If our road signs    Catch your eye          Smile        But don't forget        To buy          Burma Shave    ";

		var splitLines = Regex.Split(Lines, @"\s{2,}").Where(s => s != String.Empty);
		
		// Make signs length of 21
		foreach(string s in splitLines)
		{
			Console.Write(SignFormatter.FormatAsSign(s, 21));
		}
		
		// Make signs length of 50
		foreach(string s in splitLines)
		{
			Console.Write(SignFormatter.FormatAsSign(s, 50));
		}
		
		// Make signs length of 100
		foreach(string s in splitLines)
		{
			Console.Write(SignFormatter.FormatAsSign(s, 100));
		}
	}	
}

public static class SignFormatter
{
	private static char SignHorizontalSide = '─';
	
	private static char SignTopLeft = (char)9486; //"┎"
	private static char SignTopRight = (char)9490; //"┒"
	private static char SignBottomLeft = (char)9492; //"└"
	private static char SignBottomRight = (char)9496; //"┘"
	private static char SignVerticalSide = (char)124; //"|"
	
	public static string FormatAsSign(string input, int length)
	{
		//Needed to adjust for end pipes
		length -= 2;
		Console.WriteLine(length);
		
		StringBuilder sb = new StringBuilder();

		int spaces = length - input.Length;
		Console.WriteLine(spaces);
		
		int padLeft = spaces / 2 + input.Length;
		Console.WriteLine(padLeft);
		
		sb.AppendLine($"{SignTopLeft}{new String(SignHorizontalSide, length)}{SignTopRight}");
		sb.AppendLine($"{SignVerticalSide}{input.PadLeft(padLeft).PadRight(length)}{SignVerticalSide}");
		sb.AppendLine($"{SignBottomLeft}{new String(SignHorizontalSide, length)}{SignBottomRight}");
		
		return sb.ToString();
	}	
}
;