Многостраничные приложения в Silverlight - Получение массива слов из строки

ОГЛАВЛЕНИЕ

Получение массива слов из строки

Имея все это в StringBuilder (sb) вы готовы разбить строку на слова, которые определяются символами, расположенными между пробелами. Мы сделаем это при помощи метода Split класса RegularExpression, который возвратит массив слов,

string pattern = "\\b";
string[] allWords = System.Text.RegularExpressions.Regex.Split(
sb.ToString(), pattern );

(Если вы не знакомы с Regular Expressions, то вам стоит уделить некоторое время изучению данного аспекта в соответствующей литературе).

Вы объявляете переменную экземпляра, которая будет содержать наш финальный список уникальных слов,

private List<string> words = new List<string>();

и мы добавим два свойства для того, чтобы получить слова либо в порядке, в котором они были получены, либо отсортированные по алфавиту,

public List<string> Words
{
  get { return this.words; }
}
 
public List<string> SortedWords
{
  get
  {
    List<string> temp = this.words;
    temp.Sort();
    return temp;
  }
}

Создание уникального списка слов

Теперь мы можем пройтись по массиву, возвращенному регулярным выражением, и проверить каждое слово на предмет его уникальности, что гарантируется  его отсутствием  в нашем списке, который  не должен быть пуст (этого допускать нельзя) и  не должен содержать «мусора» (где  мусором  являются пунктуация, цифры, символы и разделители).  Мы передадим функцию определения мусора вспомогательному методу, IsJunk:

foreach ( string word in allWords )
{
  if ( words.Contains( word ) == false &&
        word.Length > 0 &&
        !IsJunk( word ) )
  {
    words.Add( word );
  }
}       // конец для каждого слова во всех словах

Вспомогательный метод получает каждое слово, исследует каждый символ в слове и возвращает false в случае если слово не содержит мусора

private bool IsJunk( string theWord )
{
   foreach ( char c in theWord.ToCharArray() )
   {
     if ( char.IsPunctuation( c ) ||
        char.IsDigit( c ) ||
        char.IsSymbol( c ) ||
        char.IsSeparator( c ) )
       return true;
   }
   return false;
}

Наконец, мы завершим обработчик события кнопки вызовом другого вспомогательного метода Display, который отобразит слова в двух элементах ScrollViewers используя свойства Words и SortedWords,  для того, чтобы получить содержимое набора слов в желаемом порядке.

private void Display()
{
  Message.Text = words.Count + " unique words added. ";
  WordDisplay.Text = string.Empty;
  SortDisplay.Text = string.Empty;
  foreach ( string s in Words )
  {
    WordDisplay.Text += " " + s;
  }
  foreach ( string s2 in SortedWords )
  {
    SortDisplay.Text += " " + s2;
  }
}

Данный код является полноценным кодом страницы Find.  Если вы будете делать свое приложение, то вы можете деактивировать (либо сделать невидимыми) кнопки для страниц Search и Count до данного момента потому, что только сейчас у вас есть список слов, который вы можете передать страницам.