Заменить несколько пробелов одним, а одиночные пробелы - спецсимволом
Нужно программа, которая проверяет текстовые строки и заменяет последовательности пропусков одним пробелом, а там где один пробел - меняет его на символ %.
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}");