创建单词流的最佳方式

时间:2009-09-29 18:17:54

标签: c# algorithm stream lexical-analysis

我希望能够写出如下内容。有人可以告诉我如何在C#中编写一个干净的WordReader类。一个词是[a-zA-Z]+

public List<string> GetSpecialWords(string text)
{
    string word;
    List<string> specialWords = new List<string>();
    using (WordReader wr = new WordReader(text))
    {
        while (true)
        {
            word = wr.Read();
            if (word == null) break;
            if (isSpecial(word)) specialWords.Add(word);
        }
    }
    return specialWords; 
}

private bool isSpecial(string word)
{
    //some business logic here
}

2 个答案:

答案 0 :(得分:1)

Regex.Match(“[a-zA-Z] +”)应该以Regex.Match对象的形式返回一个单词。您可以使用Regex.Matches来获取所有匹配的字符串,或者您可以只使用Regex.Match(“[a-zA-Z] +”,indexOfLastMatch)来获取下一个字。

MSDN:正则表达式对象

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx

如果你不允许在你的家庭作业问题中使用正则表达式,那么......

答案 1 :(得分:0)

我会读到你的有效单词字符,直到你的空格或标点符号为止。在您的情况下,您需要在流中跟踪您的索引,同时跳过标点符号和空格以及数字。这感觉就像是家庭作业,所以我将把实施留给你。

在您的情况下,您应该考虑使用带连字符的单词的情况,如果它们算作一两个单词。