-8

次のような文字列があります:- 私の名前はまあまあです。私は卒業生です。私は、c、c++、java、および sql サーバーを知っています。

この文から単語を抽出または分割して配列に格納するにはどうすればよいでしょうか?

次のような出力を取得するにはどうすればよいですか:- 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」が保存されません。

4

2 に答える 2

3

簡単なアプローチは、String.Splitパラメーターなしで使用することです。

string[] words = text.Split();

区切りパラメーターが null であるか、文字が含まれていない場合、 空白文字が区切り文字と見なされます。

最後の編集とそれに対する私のコメントに従って編集します。

SQLサーバーも分割するため、ListItem.Valueが「sqlサーバー」の場合、「sql」または「サーバー」と一致しません

君は:

それが私の問題です....あなたが「SQLサーバー」について言及したもの。

orを使用できます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);
于 2013-08-26T15:05:35.840 に答える
0

これをどれだけ複雑にしたいかによって異なりますが、簡単な方法は、スペース文字で単純に分割することです

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

必要に応じて、正規表現を介してポイントやコンマなどの他の文字を最初に削除できます。

于 2013-08-26T15:06:12.263 に答える