Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配两个字符串的字符_C#_String - Fatal编程技术网

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());

}