不区分大小写'包含(字符串)'
有没有办法让以下回报成真?
string title = "ASTRINGTOTEST";
title.Contains("string");
似乎没有超负荷允许我设置区分大小写。目前,我大写他们两个,但这只是愚蠢的。
UPDATE
我提到的愚蠢是上下套管带来的国际问题。
UPDATE
这个问题是古老的,从那以后,我意识到我要求一个简单的答案,如果你关心的是一个非常广泛和困难的话题,那么这个问题应该是完全的。
对于大多数情况下,在单语言,英语代码基础上,这个答案就足够了。 我怀疑是因为大多数来这里的人都属于这个类别,这是最受欢迎的答案。
然而,这个答案带来了固有的问题,即我们无法比较文本不区分大小写,直到我们知道两个文本是相同的文化,并且我们知道这个文化是什么。 这可能是一个不太流行的答案,但我认为它更正确,这就是为什么我这样标记它。
要测试字符串paragraph
包含字符串word
(谢谢@QuarterMeister)
culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0
culture
是CultureInfo
描述文本所写语言的实例。
这种解决方案对于大小写不敏感的定义是透明的,这与语言相关 。 例如,英文使用第九个字母的大写和小写字母I
和i
,而土耳其语使用这些字符作为第二十九个字母的第十一个和第十二个字母。 土耳其大写版本的'我'是不熟悉的字符'İ'。
因此, tin
和TIN
的字符串在英语中是相同的单词,但在土耳其语中是不同的单词。 据我所知,一个意思是'精神',另一个是象声词。 (土耳其人,请纠正我,如果我错了,或建议一个更好的例子)
总而言之,如果你知道文本的语言是什么,你只能回答这个问题'这两个字符串是相同的,但在不同的情况下'。如果你不知道,你将不得不平息。 考虑到英语在软件方面的霸权,你应该使用CultureInfo.InvariantCulture
,因为它会以熟悉的方式出错。
您可以使用String.IndexOf方法并传递StringComparison.OrdinalIgnoreCase
作为要使用的搜索类型:
string title = "STRING";
bool contains = title.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
更好的是为字符串定义一个新的扩展方法:
public static class StringExtensions
{
public static bool Contains(this string source, string toCheck, StringComparison comp)
{
return source?.IndexOf(toCheck, comp) >= 0;
}
}
请注意,这是空传播?.
自C#6.0(VS 2015)开始提供,适用于旧版本
if (source == null) return false;
return source.IndexOf(toCheck, comp) >= 0;
用法:
string title = "STRING";
bool contains = title.Contains("string", StringComparison.OrdinalIgnoreCase);
你可以像这样使用IndexOf()
:
string title = "STRING";
if (title.IndexOf("string", 0, StringComparison.CurrentCultureIgnoreCase) != -1)
{
// The string exists in the original
}
由于0(零)可以是一个索引,所以你检查-1。
MSDN
如果找到该字符串,则返回从零开始的索引值;如果不是,则返回-1。 如果value是String.Empty,则返回值为0。
链接地址: http://www.djcxy.com/p/219.html上一篇: Case insensitive 'Contains(string)'
下一篇: How do I check if an array includes an object in JavaScript?