Многостраничные приложения в 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 до данного момента потому, что только сейчас у вас есть список слов, который вы можете передать страницам.