不区分大小写的'Contains(string)'

问题描述

您可以使用String.IndexOfMethodStringComparison.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);

测试字符串是否paragraph包含字符串word

culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0

描述文本所用语言culture的实例在哪里。CultureInfo

是透明的,它是依赖于语言的。例如,英语使用字符Iandi表示第九个字母的大写和小写版本,而土耳其语使用这些字符表示其 29 个字母长的字母表中的第十一个和第十二个字母。土耳其语大写版本的“i”是不熟悉的字符“İ”。

因此,字符串tin在英语TIN中是同一个词,但在土耳其语中是不同的词。据我了解,一个意思是“精神”,另一个是象声词。(土耳其人,如果我错了,请纠正我,或者提出一个更好的例子)

总而言之,如果您知道文本的语言,您只能回答“这两个字符串是否相同但在不同情况下”的问题。如果你不知道,你将不得不采取一个平底船。鉴于英语在软件方面的霸主地位,您可能应该求助于CultureInfo.InvariantCulture,因为它会以熟悉的方式出错。

解决方法

有没有办法使以下返回为真?

string title = "ASTRINGTOTEST";
title.Contains("string");

似乎没有允许我设置区分大小写的过载。目前我将它们都大写,但这很愚蠢(我指的是上下大小写带来的i18n问题)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...