从c#中的字符串中提取单词

时间:2013-08-26 15:02:13

标签: c#

我有一个如下字符串: - 我的名字是这样的。我是一名毕业学生。我知道c,c ++,java和sql server。

如何从这句话中提取或拆分单词并将其存储在数组中?

如何获得如下输出: - c,c ++,java,sql server

我做了什么

我在“下拉列表”中加载了一组字符串,如“c”,“c ++”,“sql server”,“java”。然后我使用了以下代码。

string[] wordsinsentence = sentence.Split();//new char[] { ' ',',' ,';','\t','\n', '\r'}, StringSplitOptions.RemoveEmptyEntries);
foreach (string word in wordsinsentence)
{
    foreach (ListItem li in DropDownList1.Items)
    {
        if (li.Value == word)
        {
            DropDownList2.Items.Add(new ListItem(li.Value));
        }
    }
}

输出将只是“c ++”和“java”。 “sql server”和“c”没有被保存。

2 个答案:

答案 0 :(得分:0)

一种简单的方法是使用不带参数的String.Split

string[] words = text.Split();
  

如果separator参数为null或不包含任何字符,   假设white-space characters是分隔符。

修改根据您上次的修改和我的评论:

  你也拆分了sql server,所以如果ListItem.Value是“sql server”的话   与“sql”或“server”不匹配

您:

  

这是我的问题....你提到的“sql server”。

您可以使用Contains或(如果您想比较不区分大小写)IndexOf

string sentence = "My name is so and so. I am a graduation student. I know c, c++, java and sql server.";
string[] words = sentence.Split();

var matchingItems = DropDownList1.Items.Cast<ListItem>()
    .Where(li => words.Any(w => li.Text.IndexOf(w, StringComparison.OrdinalIgnoreCase) >= 0));
foreach(ListItem item in matchingItems)
    DropDownList2.Items.Add(item.Text);

答案 1 :(得分:0)

取决于你想要做多么复杂,简单的方法就是简单地分割空格字符

"My name is so and so.".Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);

如果需要,您可以通过某些正则表达式首先删除任何其他字符,如点或逗号。