Заменить несколько пробелов одним, а одиночные пробелы - спецсимволом

Нужно программа, которая проверяет текстовые строки и заменяет последовательности пропусков одним пробелом, а там где один пробел - меняет его на символ %.

Console.Write("Enter string: ");
var text = Console.ReadLine();
string newword = null;
string textold = Regex.Replace(text, " {2,}", " ");
foreach (var el in textold)
{
    if (Char.IsWhiteSpace(el))
    {
        newword += '%'.ToString();
        continue;
    }
    newword += el.ToString();
}
Console.WriteLine($"New string: {newword}");

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

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

Первый вариант что пришел в голову - Запарсить все строки в массив и с помощью string.replace заменить

for(int i=0; i<NeedReplace.Length;i++)
{
NeedReplace[i].Replace(' ', '%');
}

Как-то так.

→ Ссылка
Автор решения: MBo

Логика может быть примерно такой:

count = 0;
foreach (var el in text)    {
     if (Char.IsWhiteSpace(el)) 
         count++;  
     else {
        if (count==1)
           newword += "%";
        if (count>1)
           newword += " ";
        newword += el.ToString();
        count = 0;
     }
 }

С использованием StringBuilder (ideone). Если пробелы в конце нужно обработать таким же образом, то строчки с if (count после цикла ещё раз добавить.

Console.Write("Enter string: ");
var text = Console.ReadLine();
StringBuilder sb = new StringBuilder("", text.Length);
int count = 0;
foreach (var el in text)    {
     if (Char.IsWhiteSpace(el)) 
         count++;  
     else {
        if (count==1)
           sb.Append('%',1);
        if (count>1)
           sb.Append(' ',1);
        sb.Append(el,1);
        count = 0;
     }
 }
Console.WriteLine($"New string: {sb.ToString()}");
→ Ссылка
Автор решения: Pavel Popov

А почему бы сначала одиночные пробелы не заменить %, а потом множественные пробелы заменить одним

   Console.Write("Enter string: ");
   var text = Console.ReadLine();

   text = Regex.Replace(text, "\\b(\\s{1})\\b", "%");
   text = Regex.Replace(text, " {2,}", " ");

   Console.WriteLine($"New string: {text}");
→ Ссылка