C# 如何在字符串中查找大小写不敏感子字符串
Sep 22, 2021
在 C# 中如何查找大小写不敏感的子字符串, 比如我们想要下面的例子返回 true
:
1 | string title = "ASTRINGTOTEST"; |
对于英语
一种解决方案是将两个字符串都转换成大写或小写, 然后再进行比较:
1 | title.ToUpper().Contains("string".ToUpper()) == true; |
另一种方案是使用 IndexOf
方法, 该方法有一个重载方法可以忽略字符串的大小写, 即 StringComparison.OrdinalIgnoreCase
作为第二个参数:
1 | string title = "STRING"; |
我们还可以为 String
定义一个扩展方法, 重载 Contains
1 | public static class StringExtensions |
使用方法:
1 | string title = "STRING"; |
非英语语言解决方案
不同语言对于大小写的定义是不一样的, 比如在英语中 I
和 i
是第九个字符的大小写形式, 然而在土耳其语中, 这两个字符分别是第 19 和 20 个字符, 土耳其语中 i
的大写形式为 İ
. 因此 tin
和 TIN
在英语中是同一个单词, 在土耳其语中前一个词表示 精神
, 第二个是一个拟声词.
因此上面提供的方法只适用于英语语言, 为了兼容各种不同语言, C# 中提供了 CultureInfo
API, 我们可以通过下面方法进行判断:
1 | culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0 |
其中 culture
是一个 CultureInfo
对象.