Find substring in a list of strings

2020-01-29 06:48发布

问题:

I have a list like so and I want to be able to search within this list for a substring coming from another string. Example:

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

I want to search for "There" within my list and return "4234 - There". I've tried:

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

回答1:

With Linq, just retrieving the first result:

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

To do this w/o Linq (e.g. for earlier .NET version such as .NET 2.0) you can use List<T>'s FindAll method, which in this case would return all items in the list that contain the search term:

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


回答2:

To return all th entries:

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

Only the first one:

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


回答3:

What you've written causes the compile error

The best overloaded method match for 'string.Substring(int)' has some invalid arguments

Substring is used to get part of string using character position and/or length of the resultant string.

for example srch.Substring(1, 3) returns the string "her"

As other have mentioned you should use Contains which tells you if one string occurs within another. If you wanted to know the actual position you'd use IndexOf



回答4:

i like to use indexOf or contains

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


回答5:

same problem i had to do.

You need this:

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

Where:

myList is List<String> has the values that myString has to contain at any position

So de facto you search if myString contains any of the entries from the list. Hope this is what you wanted...



回答6:

And for CaseSensitive use:

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

OR

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