Исключить однобуквенные слова из строки

Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Удалить из сообщения все однобуквенные слова. C#. Есть код, но как я понимаю он не удаляет, а перезаписывает. Нужно обязательно через StringBuilder сделать. Нужно как понимаю через Remove. Но не знаю как это реализовать. Вот исходник

using System;
using System.Text;
namespace OOP3
{
    class Class
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Введите строку состоящую из слов разделенных пробелами");
            string[] words = Console.ReadLine().Split(' ');
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < words.Length; i++)
            {
                if (words[i].Length != 1)
                    Console.Write(words[i] + " ");
            }
            Console.WriteLine();
        }
    }
}

Ответы (4 шт):

Автор решения: CrazyElf

Примерно так можно:

using System;
using System.Text;
namespace OOP3
{
    class Class
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Введите строку состоящую из слов разделенных пробелами");
            string[] words = Console.ReadLine().Split(' ');
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < words.Length; i++)
            {
                if (words[i].Length != 1)
                    sb.Append(word[i] + " ")
            }
            Console.WriteLine(sb.ToString());
        }
    }
}
→ Ссылка
Автор решения: Qwertiy

Вообще, я бы делал так: https://ideone.com/rPV99l

using System;
using System.Text.RegularExpressions;

public class Test
{
  public static void Main()
  {
    Console.WriteLine(Regex.Replace(Console.ReadLine(), @"\b\w\b\W*", ""));
  }
}
→ Ссылка
Автор решения: Qwertiy

https://ideone.com/svyE2i

using System;
using System.Text;

public class Test
{
  public static void Main()
  {
    var s = Console.ReadLine();
    var sb = new StringBuilder();

    Func<int, bool> check = (int i) => i>=0 && i<s.Length && Char.IsLetterOrDigit(s[i]);

    for (var q=0; q<s.Length; )
      if (Char.IsLetterOrDigit(s[q]) && !check(q-1) && !check(q+1))
        while (++q<s.Length && !Char.IsLetterOrDigit(s[q]));
      else
        sb.Append(s[q++]);

    Console.WriteLine(sb.ToString());
  }
}
→ Ссылка
Автор решения: Геннадий П

Если проходили Linq, то можно все практически в одну строку:

string str = "Проверка а не пример";
StringBuilder sb = new StringBuilder();
foreach (string sbitem in str.Split(' ').Where(item => item.Count(char.IsLetterOrDigit) > 1)) sb.Append(sbitem + ' ');
Console.WriteLine(sb.ToString().Trim());

Если без StringBuilder, то еще меньше строк:

string str = "Проверка а не пример";
Console.WriteLine(string.Join(' ', str.Split(' ').Where(item => item.Count(char.IsLetterOrDigit) > 1)));
→ Ссылка