string str = $" I\tam a \t\t\t\r\n string\rwith \r\r\n\r\n many spaces. ";
Console.WriteLine($"\"{str.ConsolidateWhiteSpace()}\"");
Console.WriteLine($"\"{str.ConsolidateWhiteSpace2()}\"");
public static class StringExtensions {
public static string ConsolidateWhiteSpace(this string? value) => value?.Length switch
>1 => value.Aggregate((builder: new StringBuilder(value.Length), lastChar: 'A'),
(tuple, c) => !char.IsWhiteSpace(c) ? (tuple.builder.Append(c), tuple.lastChar = c)
: !char.IsWhiteSpace(tuple.lastChar) ? (tuple.builder.Append(' '), tuple.lastChar = c)
: (tuple.builder, tuple.lastChar = c),
tuple => tuple.builder.ToString()),
_ => throw new InvalidOperationException($"Invalid sting length {value.Length}"),
public static string ConsolidateWhiteSpace2(this string? instr) => instr?.Length switch
>1 => char.IsWhiteSpace(instr[0]) switch {
false => instr[0] + instr.Substring(1).ConsolidateWhiteSpace2(),
true => char.IsWhiteSpace(instr[1]) ? instr.Substring(1).ConsolidateWhiteSpace2() : " " + instr.Substring(1).ConsolidateWhiteSpace2()