C# 匹配两个字符串的字符
假设我有两个字符串。C# 匹配两个字符串的字符,c#,string,C#,String,假设我有两个字符串。NameIs和Nam。现在我可以使用以下方法检查一个字符串是否与另一个相同: If (string1 == string2) 但是它在这里不起作用,因为字符串不一样。但是它的一部分是相同的。我试图实现的是检查我的主字符串是否有给定字符串的任何部分…我遇到了string.StartWith和EndWith方法,但是在那里,我需要指定字符串的开头或结尾,但我不能指定,因为字符串可以是任何东西(这就是为什么在开始时,我说“假设”) 所以我的第一个问题是如何做到这一点?我不需要任何
NameIs
和Nam
。现在我可以使用以下方法检查一个字符串是否与另一个相同:
If (string1 == string2)
但是它在这里不起作用,因为字符串不一样。但是它的一部分是相同的。我试图实现的是检查我的主字符串是否有给定字符串的任何部分…我遇到了string.StartWith
和EndWith
方法,但是在那里,我需要指定字符串的开头或结尾,但我不能指定,因为字符串可以是任何东西(这就是为什么在开始时,我说“假设”)
所以我的第一个问题是如何做到这一点?我不需要任何step=to=step指令,但至少需要一点方向:)
然而,如果我克服了这一点,仍然有一个缺点,那就是区分大小写的问题。我遇到过这个问题,但我似乎无法在我的案例中找到所需的实现,因为我需要先解决第一个问题
如何实现这些目标?对于顺序比较,您可以使用
str1.Contains(str2);
如果您需要比较不区分大小写,您可以这样做
str1.IndexOf(str2, StringComparison.OrdinalIgnoreCase) >= 0;
请注意,您可以在扩展方法中隐藏后者,如
static bool ContainsIgnoreCase(this string @this, string other)
=> @this.IndexOf(other, StringComparison.OrdinalIgnoreCase) >= 0;
使用
只需记住在进行包含比较时检查字符串是否不为null,否则您将得到ArgumentNullException.最简单的方法是:
a = a?.ToLowerInvariant();
b = b?.ToLowerInvariant();
if(a==null || b==null || a.Contains(b) || b.Contains(a))
{
//do stuff
}
为什么空表示为真?因为如果任何变量为空,它将明确包含在其他变量中。其他两个规范仅适用于非空条目。要检查主字符串中是否包含子字符串,并忽略区分大小写的操作,它是一个布尔函数,接受两个字符串参数:
public bool DoesStringExistInsideMainString(string mainString, string subString)
{
return mainString.ToLower().Contains(subString.ToLower());
}
Use.Contains(),它是一个字符串函数,如果主字符串“包含”子字符串,则返回true真的吗?你问这个?实际上可能是一个更好的复制。OP陈述了两个问题。您的解决方案在某种程度上消除了第一个问题。但是,您的答案中没有解释。请相应地编辑:)现在,您应该获得一次投票:)它没有消除区分大小写的问题,是吗?现在是了。我修正了这个例子。它将忽略大小写、区域性并正确处理空条目。我个人认为
null
是未知的。字符串是否包含未知值?这是未知的,我个人认为它是假的,不是真的。@juharr甚至抛出一个参数null exception有比使用ToLower
或ToUpper
更好的方法来进行大小写密集型检查。它适用于大多数字符集,但有些语言的字母没有从小写到大写的1对1映射。
public bool DoesStringExistInsideMainString(string mainString, string subString)
{
return mainString.ToLower().Contains(subString.ToLower());
}