C# 如何检查字符串是否包含字符串数组中的字符串?

C# 如何检查字符串是否包含字符串数组中的字符串?,c#,string,C#,String,这是我的例子 string test = "Hello World, I am testing this string."; string[] myWords = {"testing", "string"}; 如何检查字符串测试是否包含以下任何单词?如果它确实包含了我该如何制作它,以便它可以用一个等于长度的星号来替换这些单词?类似这样的东西 var containsAny = myWords.Any(x => test.Contains(x)); foreach (var word i

这是我的例子

string test = "Hello World, I am testing this string.";
string[] myWords = {"testing", "string"};
如何检查字符串测试是否包含以下任何单词?如果它确实包含了我该如何制作它,以便它可以用一个等于长度的星号来替换这些单词?

类似这样的东西

var containsAny = myWords.Any(x => test.Contains(x));
foreach (var word in mywords){

    if(test.Contains(word )){

        string astr = new string("*", word.Length);

        test.Replace(word, astr);
    }
}
编辑:优化了类似这样的内容

foreach (var word in mywords){

    if(test.Contains(word )){

        string astr = new string("*", word.Length);

        test.Replace(word, astr);
    }
}
编辑:优化

您可以使用正则表达式:

public string AstrixSomeWords(string test)
{
    Regex regex = new Regex(@"\b\w+\b");

    return regex.Replace(test, AsterixWord);
}

private string AsterixWord(Match match)
{
    string word = match.Groups[0].Value;
    if (myWords.Contains(word))
        return new String('*', word.Length);   
    else
        return word;
}
我已经检查了代码,它似乎像预期的那样工作

如果MyWord中单词的数量很大,你可以考虑使用HasSeT来获得更好的性能。

可以使用正则表达式:

public string AstrixSomeWords(string test)
{
    Regex regex = new Regex(@"\b\w+\b");

    return regex.Replace(test, AsterixWord);
}

private string AsterixWord(Match match)
{
    string word = match.Groups[0].Value;
    if (myWords.Contains(word))
        return new String('*', word.Length);   
    else
        return word;
}
我已经检查了代码,它似乎像预期的那样工作


如果MyWord中单词的数量很大,你可以考虑使用HASSET来提高性能。

+ 1用于检查单词边界-其他解决方案也将匹配<代码>“test”< /C> >,这可能不是有意的。+ 1用于检查单词边界-其他解决方案也将匹配<代码>“test”< /C>这可能不是故意的。你应该用它来代替。你永远不知道它的存在。谢谢。你应该改用它。我不知道它的存在。谢谢。那么我该如何使它将这些单词变成星号,等于应该被过滤的单词的长度?那么我该如何使它将这些单词变成星号,等于应该被过滤的单词的长度?