【问题标题】:Find substring in a list of strings在字符串列表中查找子字符串
【发布时间】:2012-05-16 08:16:42
【问题描述】:

我有一个这样的列表,我希望能够在这个列表中搜索来自另一个字符串的子字符串。示例:

List<string> list = new List<string>();
string srch = "There";
list.Add("1234 - Hello");
list.Add("4234 - There");
list.Add("2342 - World");

我想在我的列表中搜索"There" 并返回"4234 - There"。我试过了:

var mySearch = list.FindAll(S => s.substring(srch));
foreach(var temp in mySearch)
{
    string result = temp;
}

【问题讨论】:

    标签: c# .net string linq substring


    【解决方案1】:

    使用 Linq,只需检索第一个结果:

    string result = list.FirstOrDefault(s => s.Contains(srch));
    

    要在没有 Linq 的情况下执行此操作(例如,对于早期的 .NET 版本,例如 .NET 2.0),您可以使用 List&lt;T&gt;FindAll 方法,在这种情况下,该方法将返回列表中包含搜索词:

    var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); });
    

    【讨论】:

    • 您好,感谢您的快速回答,我收到编译错误:FirstOrDefault 而不是扩展方法。我需要添加某种类型的列表库吗?
    • 如何添加Linq?很抱歉提出新问题。
    • 您需要在文件中添加using System.Linq - 我假设您使用的是 .NET 4.0?
    • 我的项目设置为 2.0,我更改为 4.0,但现在编译错误一大堆。但是能够添加 System.Linq。谢谢大家。
    • 当然你也可以使用FindAll的简写形式(s =&gt; s.Contains(srch))。
    【解决方案2】:

    返回所有条目:

    IEnumerable<string> result = list.Where(s => s.Contains(search));
    

    只有第一个:

    string result = list.FirstOrDefault(s => s.Contains(search));
    

    【讨论】:

    • 这个'where'不起作用,返回空列表。选择的答案就可以了。
    • @Jhollman:不,它工作正常dotnetfiddle.net/bjuZ5p 检查您的代码,您可能会遇到大小写问题。欢迎提出新问题。
    【解决方案3】:

    你写的导致编译错误

    'string.Substring(int)' 的最佳重载方法匹配有一些无效参数

    子字符串用于使用字符位置和/或结果字符串的长度来获取字符串的一部分。

    例如 srch.Substring(1, 3) 返回字符串“她”

    正如其他人提到的,您应该使用Contains,它会告诉您一个字符串是否出现在另一个字符串中。如果你想知道你会使用的实际位置IndexOf

    【讨论】:

      【解决方案4】:

      同样的问题我不得不做。

      你需要这个:

      myList.Where(listStrinEntry => myString.IndexOf(listStringEntry) != -1)
      

      地点:

      myListList&lt;String&gt; 具有值 myString 必须包含在任何位置

      所以事实上你搜索 myString 是否包含列表中的任何条目。 希望这是你想要的...

      【讨论】:

        【解决方案5】:

        我喜欢使用 indexOf 或 contains

        someString.IndexOf("this");
        someString.Contains("this");
        

        【讨论】:

          【解决方案6】:

          对于CaseSensitive 使用:

          YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToLower().Contains("some substring"));
          

          YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToUpper().Contains("some substring"));
          

          【讨论】:

            猜你喜欢
            • 2023-04-03
            • 2018-09-27
            • 2021-04-21
            • 1970-01-01
            • 2019-06-22
            • 1970-01-01
            • 1970-01-01
            • 2011-04-10
            相关资源
            最近更新 更多