c#检查字符串A中的任何字母是否包含字符串B
本文关键字:字符串 是否 包含 任何字 检查 | 更新日期: 2023-09-27 18:05:58
我有一个字符串(String1),文本为"HELLO"。
现在我想检查String2是否有String1的任何字母。如果是,我想删除String2中的那个字母。我该怎么做呢?
尝试使用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