-3

文字列に同じ単語が 2 回含まれているかどうかを確認するにはどうすればよいですか?

何かのようなもの:

  • " <Item> MyString <Item> <Item> MyString <Item> "true
  • " <Item> MyString <Item> <Item> NotMyString <Item> "false
  • " <Item> MyString <Item> <Fact> MyString <Fact> "false

実行時に元の文字列を取得するだけで、文字列内の単語の最初のバッチであるとは限りません。

4

3 に答える 3

4

スペースに基づいて文字列を分割する which を使用string.Split()して、比較する文字列のカウントをチェックし、それが等しいかより大きいかどうかを確認できます2

string strToCompare = "MyString";
string str = " MyString MyString ";

if(str.Split().Count(r=> r == strToCompare) >= 2)
   //exists twice or more

編集:質問が編集されたため。次のことを試すことができます。

var duplicateArray = str.Split()
                        .GroupBy(r=> r) 
                        .Where(t=> t.Count() >= 2)
                        .ToArray();

上記では、文字列内のカウントが 2 倍以上の単語の配列が得られます。

于 2013-04-14T08:41:16.277 に答える
1
string str = " MyString MyString ";

var result = str.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries)
                .GroupBy(word => word)
                .Any(grp => grp.Count() > 1);

Console.WriteLine (result); // will print true
于 2013-04-14T08:46:46.197 に答える
1

単語が 2 回使用されているかどうかを確認するには、Split関数を使用して文字列を単語に変換し、Groupカウントを取得します。

string input = "MyString MyString";
var words = input.Split().GroupBy(s => s).ToDictionary(
                                                  g => g.Key, 
                                                  g => g.Count()
                                          );

ディクショナリは、キーが単語であるとのペアwordsのセットになり、値は入力文字列での回数です。複数回出現する単語を検索する場合:keyvalue

bool hasDuplicateWords = words.Any(w => w.Value > 1);

複数回出現する単語を見つけるには:

var duplicateWords = words.Where(w => w.Value > 1);

編集:質問を編集した後、単純な文字列を解析しているようではなく、XML コードを解析しているようです。XML を操作するには、次のような XML パーサーを使用する必要があります (エディターではチェックされません)。

var input = "<Item> MyString <Item> <Item> MyString <Item>";
var xml = XElement.Parse(input);

bool hasDuplicateWords = xml.Children
                            .GroupBy(x => x.Name)
                            .Any(x => x.Count() > 1);
于 2013-04-14T08:55:51.520 に答える