Исключить однобуквенные слова из строки
Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Удалить из сообщения все однобуквенные слова. 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
→ Ссылка
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)));