c#检查字符串A中的任何字母是否包含字符串B

本文关键字:字符串 是否 包含 任何字 检查 | 更新日期: 2023-09-27 18:05:58

我有一个字符串(String1),文本为"HELLO"。

现在我想检查String2是否有String1的任何字母。如果是,我想删除String2中的那个字母。我该怎么做呢?

c#检查字符串A中的任何字母是否包含字符串B

尝试使用Linq;,检查firstString是否有字符出现在secondString中:

 bool result = firstString.Intersect(secondString).Any();

secondString中删除firstString字符:

 string result = string.Concat(secondString.Except(firstString)); 

编辑: Except有一个副作用:它也从secondString中删除了重复的,参见下面的Ivan Stoev的评论。保留重复项

 HashSet<char> toRemove = new HashSet<char>(firstString);   
 string result = string.Concat(secondString.Where(c => !toRemove.Contains(c)));

说明:

        string a = "HELLO";
        string b = "GOODBYE";
        foreach (char c in a.ToCharArray())
        {
            if (b.Contains(c)) { b = b.Replace(c.ToString(), string.Empty); }
        }

输出:b = "GDBY"

像下面这样创建Helper:

IEnumerable<Tuple<char, int>> IndexDistinct(IEnumerable<char> source)
{
    var D = new Dictionary<char, int>();
    foreach (var c in source)
    {
        D[c] = D.ContainsKey(c) ? (D[c] + 1) : 0;
        yield return Tuple.Create(c, D[c]);
    }
}

现在在函数中调用helper方法:

string removeMatch(string str1, string str2)
{
    return new string(
        IndexDistinct(str1)
            .Except(IndexDistinct(str2))
            .Select(x => x.Item1)
            .ToArray());
}

这可能是最短的方法

var str1 = "Hello World";
var str2 = "Hello Word Again";
var result = string.Joing("", str2.Except(str1));
Console.WriteLine(result); //Again