一尘不染

不区分大小写的“包含(字符串)”

c#

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

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

似乎没有允许我设置大小写敏感度的重载。.目前,我都将它们都大写,但这只是愚蠢的(我指的是上下外壳附带的i18n问题)。

更新
这个问题是古老的,从那时起,我意识到如果您希望进行全面研究,我会为一个非常广泛且困难的主题要求一个简单的答案。
在大多数情况下,在单语的英语代码库中,答案就足够了。我很怀疑,因为大多数来这里的人都属于这一类,这是最受欢迎的答案。但是,
这个答案提出了一个固有的问题,即我们无法区分不区分大小写的文本,直到我们知道两个文本是相同的文化并且我们知道该文化是什么。这可能是一个不太受欢迎的答案,但我认为它更正确,这就是为什么我将其标记为这样。


阅读 318

收藏
2020-05-19

共1个答案

一尘不染

测试字符串是否paragraph包含字符串word(感谢@QuarterMeister)

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

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

该解决方案对于 不区分大小写的定义 是透明的, 该定义取决于语言
。例如,英语使用第九个字母的字符I以及i大写和小写形式,而土耳其语使用29个字母长的字母的第十一和第十二个字母的字符。土耳其语的大写版本“
i”是一个陌生的字符“İ”。

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

总而言之, 如果您知道文本所用的语言 ,则只能回答“这两个字符串相同但在不同情况下” 的问题
。如果您不知道,则必须平底锅。考虑到英语在软件方面的霸权,您可能应该诉诸CultureInfo.InvariantCulture,因为用熟悉的方式会出错。

2020-05-19