在 C# 中实现不区分大小写的文本搜索有几种方法,以下是常见的实现方式:
1. 使用 String.Equals 或 CompareInfo.Compare
string text = "Hello World";
string searchTerm = "hello";
// 方法1: 使用 String.Equals
bool isMatch1 = text.Equals(searchTerm, StringComparison.OrdinalIgnoreCase);
// 方法2: 使用 CompareInfo.Compare
bool isMatch2 = string.Compare(text, searchTerm, StringComparison.OrdinalIgnoreCase) == 0;
2. 使用 Contains 方法(C# 8.0+)
string text = "Hello World";
string searchTerm = "hello";
bool contains = text.Contains(searchTerm, StringComparison.OrdinalIgnoreCase);
3. 使用 IndexOf 方法
string text = "Hello World";
string searchTerm = "hello";
bool contains = text.IndexOf(searchTerm, StringComparison.OrdinalIgnoreCase) >= 0;
4. 使用正则表达式
using System.Text.RegularExpressions;
string text = "Hello World";
string searchTerm = "hello";
bool isMatch = Regex.IsMatch(text, Regex.Escape(searchTerm), RegexOptions.IgnoreCase);
5. 在 LINQ 查询中使用不区分大小写比较
using System.Linq;
List<string> words = new List<string> { "Apple", "banana", "ORANGE" };
string searchTerm = "apple";
var matches = words.Where(w => w.Equals(searchTerm, StringComparison.OrdinalIgnoreCase));
6. 自定义扩展方法
public static class StringExtensions
{
public static bool ContainsIgnoreCase(this string source, string toCheck)
{
return source?.IndexOf(toCheck, StringComparison.OrdinalIgnoreCase) >= 0;
}
}
// 使用
string text = "Hello World";
bool contains = text.ContainsIgnoreCase("hello");
性能考虑
- 对于简单的比较,
StringComparison.OrdinalIgnoreCase
通常性能最好 - 如果需要更复杂的文化敏感比较,可以使用
CurrentCultureIgnoreCase
或InvariantCultureIgnoreCase
- 正则表达式方法最灵活但性能相对较低
完整示例
using System;
using System.Linq;
class Program
{
static void Main()
{
string text = "The Quick Brown Fox jumps over the lazy dog";
string searchTerm = "fox";
// 检查是否包含
bool contains = text.Contains(searchTerm, StringComparison.OrdinalIgnoreCase);
Console.WriteLine($"Contains '{searchTerm}' (case-insensitive): {contains}");
// 获取所有匹配项
var allMatches = text.Split(' ')
.Where(word => word.Equals(searchTerm, StringComparison.OrdinalIgnoreCase));
Console.WriteLine($"All matches: {string.Join(", ", allMatches)}");
// 获取第一个匹配的位置
int index = text.IndexOf(searchTerm, StringComparison.OrdinalIgnoreCase);
Console.WriteLine($"First occurrence at index: {index}");
}
}
选择哪种方法取决于你的具体需求,如是否需要知道匹配位置、是否需要处理多个匹配项等。
发表回复