是否有将字符串与较大字符串进行比较的函数?

时间:2013-05-21 05:34:34

标签: c# string compare

解释我的问题的更好方法是这样的

列出名称中包含给定字符串的某人的姓名。例如,如果给定的字符串是“John”,系统将显示名称中包含“John”的每个人的姓名,例如“John Smith”,“Elton Johns”和“johnny H”。

我无法在问题中解释它并试图找到我在谷歌上寻找的东西,当我不能说短语是对的时候很难

5 个答案:

答案 0 :(得分:2)

如果您的搜索区分大小写,则可以使用Contains

var name = "John Smith";
if(name.Contains("John"))
{
   // Name contains John
}

或者,要获取所有包含 John 的名称:

var names = new string[] {"John Smith", "Bob Smith", "Frank"};
var results = names.Where(n => n.Contains("John"));

如果要忽略大小写,可以将两个字符串转换为小写:

var results = names.Where(n => n.ToLower().Contains("john"));

您还可以将自己不区分大小写的Contains函数实现为扩展方法:

public static bool Contains(this string value, string substr, StringComparison c)
{
  return value.IndexOf(substr, c) >= 0;
}

然后使用:

var results = names.Where(n => n.Contains("John", StringComparison.OrdinalIgnoreCase));

答案 1 :(得分:0)

IList<string> lst = new List<string>();

lst.add("John Smith");
lst.add("Elton Johns");
lst.add("mark");
lst.add("jones");

现在要获取包含"John"

的名称
var resultList = lst.Where(x => x.Contains("John")).ToList();

答案 2 :(得分:0)

使用System.Linq

    private static List<String> GetNames(List<string> names ,string name)
    {
        return names.Where(x => x.ToLower().Contains(name.ToLower())).ToList();
    }

答案 3 :(得分:0)

我们有String.ContainsString.IndexOf

  

String.Contains:返回一个指示是否指定的值   字符串对象出现在此字符串中。

     

String.IndexOf:报告第一次出现的从零开始的索引   在此实例中指定的Unicode字符或字符串。该   如果在此中找不到字符或字符串,则返回-1   实例

Contains区分大小写,如果您想要“John”并找到“johnny H”,最好使用IndexOf

var key = "John";
var names = new[]{"John Smith", "Elton Johns", "johnny H"};
foreach(var name in names)
if(name.IndexOf(key, StringComparison.InvariantCultureIgnoreCase) > -1) {
    // Name contains the key
}

如果您想使用包含,则应使用适当的文化信息将名称和密钥转换为更高或更低。

答案 4 :(得分:0)

也许您还应该考虑使用大写( .ToUpper )并清理( .Replace(“,”,“”))字符串,然后再使用进行操作.Contains ,否则“johny H”不会包含“John”。