检查列表是不是包含具有不同大小写的相同字符串
Posted
技术标签:
【中文标题】检查列表是不是包含具有不同大小写的相同字符串【英文标题】:Check if a list contains the same string with different case检查列表是否包含具有不同大小写的相同字符串 【发布时间】:2021-12-17 06:26:06 【问题描述】:我正在尝试提供一个查询,该查询告诉我天气是否字符串列表仅在大小写不同的情况下与输入匹配。请帮忙。
如果输入是“动物”,那么我需要得到一个真实的。如果输入是“Animal”,那么我应该得到一个错误,因为输入与项目列表中的大小写完全匹配。我不能说 StringComparison.OrdinalIgnoreCase 因为它总是返回一个 true。
class Program
static void Main(string[] args)
string abc = "animal";
List<string> items = new List<string>() "Animal", "Ball" ;
if (items.Any(x => x.Matches(abc, StringComparison.Ordinal)))
Console.WriteLine("matched");
Console.ReadLine();
static class Extentions
public static bool Matches(this string source, string toCheck, StringComparison comp)
return source?.IndexOf(toCheck, comp) == 0;
【问题讨论】:
IndexOf
和0
比较是个坏主意也是 因为如果source
是"Animalissimo"
并且toCheck
是"animal"
,那么索引返回的是0
,因为有一个子字符串最初从source
开始。
【参考方案1】:
您可以比较两次:区分大小写在区分大小写:
if (items.Any(item => abc.Equals(item, StringComparison.OrdinalIgnoreCase) &&
abc.Equals(item, StringComparison.Ordinal)))
Console.WriteLine("matched");
【讨论】:
谢谢你的作品。【参考方案2】:如果我理解正确,我想你正在寻找这个:
if (items.Any(t => abc.Equals(t, StringComparison.OrdinalIgnoreCase) &&
t != abc))
Console.WriteLine("matched");
if 的第一部分将匹配字符串以检查第二部分将确保它们的大小写不同。
【讨论】:
感谢工作。我正是在寻找那个。 不要使用ToLower
进行不区分大小写的比较 - 有些字母不会在大写和小写之间往返。使用StringComparison.XXXIgnoreCase
比较之一以上是关于检查列表是不是包含具有不同大小写的相同字符串的主要内容,如果未能解决你的问题,请参考以下文章