[.NET] C# Разделить строку на слова

Здравствуйте уважаемые программисты. Сегодня мы будем обсудить как разделить строку на слова.

Допустим у нас есть строка: "This is a test string" и нам нужно получить слова из этой строки. Посмотрев на нашу строку то у нас возникает идея что надо как-то символ пробела (Space) сделать разделителем и все полученные слова поместить в какой нибудь массив. Для разделения строк на слова нам поможет замечательная функция Split.

String.Split это метод позволяющий разделить строку на подстроки с помощью разделителя. Синтаксис метода таков:
public string[] Split(
    params char[] separator
)

Давайте рассмотрим небольшой пример разделения строк на слова:
namespace Split
{
    using System;

    class Program
    {
        static void Main()
        {
            const string Text = "This is a test string";
            string[] words = Text.Split(' ');
            foreach (string word in words)
            {
                Console.WriteLine(word);
            }
        }
    }
}

/*
 *      Output:
 *      -----------
 *      This
 *      is
 *      a
 *      test
 *      string
*/
Думаю тут все понятно:

  1. Задаем константу с текстом.
    Примечание: Можете использовать и переменную если вы хотите ввести текст с клавиатуры и получить его с помощью конструкций Console.ReadLine()
  2. Разделяем строку на подстроки и помещаем их в строковой массив. Separator или разделитель у нас пробел
  3. Из массива берется каждый элемент и выводится на экран.
Думаю вам было все понято, но бывают ситуации когда нам нужно получить слова из строки но строка у нас имеет такой вид: "Основные слова: дружба, любовь , счастье?!" ? Здесь присутствует символ пробела, двоеточие, запятая, вопросительный и восклицательный знак. Избавится от них можно вместо чтобы передавать только один знак(т.е. знак пробела) в качестве разделителя мы передадим массив символов:
string[] words = Text.Split(new[]{' ', ',', ':', '?', '!'});

Здесь вы скажете что все, проблема решена, но хочу вас огорчить так как если вы поставите Breakpoint(точка останова) на этот код то вы заметите что массив имеет не только слова но и пустые элементы:
[0] "Основные"
[1] "слова"
[2] ""
[3] "дружба"
[4] ""
[5] "любовь"
[6] ""
[7] ""
[8] "счастье"
[9] ""
[10] ""
Это произошло потому что между разделителями нет ни одного строчного символа. Избавится от пустых элементов массива легко, надо лишь добавить к методу String.Split перечисление StringSplitOptions.RemoveEmptyEntries. Это исключит из массива пустые элементы без всяких заморочек :)

Итак полный работоспособный код будет выглядеть так:
namespace Split
{
    using System;

    class Program
    {
        static void Main()
        {
            const string Text = "Основные слова: дружба, любовь , счастье?!";
            string[] words = Text.Split(new[] { ' ', ',', ':', '?', '!' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string word in words)
            {
                Console.WriteLine(word);
            }
        }
    }
}

/*
 *      Output:
 *      -----------
 *      Основные
 *      слова
 *      дружба
 *      любовь
 *      счастье
*/

Ну вот и все. Если заметили грамматические ошибки или работоспособность кода нарушена пишите в комментариях или на почту: powercodx@mail.ru
Автор: PowerCodX, 2013

Postări populare de pe acest blog

C# - Перемешать Массив

C# взаимодействие с сайтом