如何检查字符串是否包含两次相同的单词?
就像是:
" <Item> MyString <Item> <Item> MyString <Item> "
→true
" <Item> MyString <Item> <Item> NotMyString <Item> "
→false
" <Item> MyString <Item> <Fact> MyString <Fact> "
→false
我只在运行时获取原始字符串,它不一定是字符串中的第一批单词。
您可以使用string.Split()
which 将根据空格拆分字符串,然后您可以检查要比较的字符串的计数,看看它是否等于或大于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();
上面的 Tha 将为您提供字符串中计数为两倍或更多的单词的数组。
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
如果要检查要使用两次的任何单词,请使用该Split
函数将字符串转换为单词,然后Group
获取计数:
string input = "MyString MyString";
var words = input.Split().GroupBy(s => s).ToDictionary(
g => g.Key,
g => g.Count()
);
字典words
将是一组key
和value
对,其中键是单词,值是它在输入字符串中的次数。如果要查找多次出现的单词:
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);