在字符串列表中查找子字符串

24

我有一个列表,我想在其中搜索来自另一个字符串的子字符串。例如:

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;
}
6个回答

33

使用 Linq 只需获取第一个结果:

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

如果不使用Linq(例如对于较早版本的.NET,如.NET 2.0),您可以使用List<T>FindAll方法来完成此操作,在这种情况下,它将返回列表中所有包含搜索术语的项目:

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

嗨,感谢您的快速回复。我遇到了编译错误:FirstOrDefault不是扩展方法。我需要添加某种列表库吗? - user1380621
如何添加 Linq?对于这个新手问题,我很抱歉。 - user1380621
2
你需要在文件中添加 using System.Linq - 我假设你正在使用 .NET 4.0? - BrokenGlass
我的项目原本是设置为2.0版本,我将其更改为4.0版本,但现在出现了许多编译错误。不过,我成功添加了System.Linq库。谢谢大家。 - user1380621
2
当然,您也可以使用FindAll的简短形式(s => s.Contains(srch))。 - d4Rk
"IgnoreCase" 是什么意思? - Diego Venâncio

13
为了返回所有条目:
IEnumerable<string> result = list.Where(s => s.Contains(search));

只保留第一个:

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

这个“where”不起作用,返回空列表。所选答案可以完成任务。 - Jhollman
@Jhollman:不,它运行良好 https://dotnetfiddle.net/bjuZ5p 检查你的代码,可能遇到了大小写问题。随时提出新问题。 - abatishchev

1

你所写的代码导致编译错误

“string.Substring(int)”的最佳重载方法存在一些无效参数

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

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

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


1
"同样的问题我也需要解决。

你需要这个:

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

在哪里:

myListList<String>,它包含了 myString 必须包含的任何位置的值。

因此,实际上您正在搜索myString是否包含列表中的任何条目。希望这就是您想要的...


0

我喜欢使用indexOf或contains

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

0

而对于CaseSensitive的使用:

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

或者

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接