I\'m reading a comma-delimited list of strings from a config file. I need to check whether another string is in that list. For example:
\"apple,banana,cheese\"
Here's an option that ignores case.
var food = "apple,banana,cheese";
bool containsApp = food.Split(',')
.Where(s => string.Compare("app", s, true) == 0)
.Count() > 0;
bool containsApple = food.Split(',')
.Where(s => string.Compare("apple", s, true) == 0)
.Count() > 0;
Console.WriteLine("Contains \"app\"? {0}", containsApp);
Console.WriteLine("Contains \"apple\"? {0}", containsApple);
The answer depends on what the syntax rules for your comma-delimited list are.
If the rules require that the list be exactly as you posted (no spaces, no trailing comma) then the task can be broken down into it's component pieces:
Does the string begin with apple,
? (String.StartsWith)
Does the string end with ,apple
? (String.EndsWith)
Does the string contain ,apple,
? (String.Contains)
If the rules are more difficult then the Regex approach becomes the only way without fully processing the list or writing a heap of rules.
If you are checking for many items against the same string you'll want to just transform the string into a list which you cache and then check against. The String.Split method will do this for you.
Regex probably doesn't count as "straight-forward", but this is what I've got:
Regex.IsMatch(listString, "(?<=,|^)" + testWord + "(?=,|$)")
Update: Per Eric's comment below, this should be:
Regex.IsMatch(listString, "(?<=,|^)" + Regex.Escape(testWord) + "(?=,|$)")
Another way might be to try using
bool contains = new List<string>("apple,banana,cheese".Split(',')).Contains("apple");
//or
bool b = "apple,banana,cheese".Split(',').Contains("apple");
List< T>.Contains Method
String.Split Method
Enumerable.Contains Method
(","+listString+",").Contains(","+testWord+",");
but not straight-forward, too.
public bool GetIsExistSubstring(string mainstring, string substring)
{
bool Isexist=false;
int i = -1;
mainstring = string.Format(",{0},", mainstring);//so it will be like ,1,2,3,
substring = string.Format(",{0},", substring);//so it will be like ,1,
i=mainstring.IndexOf(substring);
if(i!=-1)
{
Isexist = true;
}
return Isexist;
}