大挪耗

C# 文本不区分大小写搜索

在 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}");
    }
}

选择哪种方法取决于你的具体需求,如是否需要知道匹配位置、是否需要处理多个匹配项等。


已发布

分类

可以收藏大挪耗一下。下载麻烦点城通网盘,站长保证下载速度,不会限速的,放心点就是了;分卷,安卓下载为txt:程序下载为url,不会下载参考不会下载。如果你想让本站活的久一点,请直接捐助

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注