Reputation: 63
I have this problem, I'm using StringReader to find specific words from a textbox, so far is working great, however I need to find a way how to check specific words in every line against a string array.
The following code works:
string txt = txtInput.Text;
string user1 = "adam";
int users = 0;
int systems = 0;
using (StringReader reader = new StringReader(txt))
{
while ((txt = reader.ReadLine()) != null)
{
if (txt.Contains(user1))
{
users++;
}
}
}
Now, I have created a String Array to store more than one string, but the method Contains seems to only accept a string.
string[] systemsarray = new string[] { "as400", "x500", "mainframe" };
if(txt.Contains(systemsarray))
{
systems++;
}
// error message: cannot convert from string[] to string
Does anyone have an idea how to do this, or a way to improve it?
Thanks in advance.
Upvotes: 6
Views: 1989
Reputation: 1387
you need to extract each item from your array:
foreach (string item in systemsarray)
{
if(txt.Contains(item))
{
systems++;
}
}
Upvotes: 5
Reputation: 69372
If you want a case-insensitive search (as400
will match AS400
), you can do this
if (systemsarray.Any(x => x.Equals(txt, StringComparison.OrdinalIgnoreCase)))
{
//systemsarray contains txt or TXT or TxT etc...
}
You can remove StringComparison.OrdinalIgnoreCase if you want to take the case into account (or choose a different enum value).
Upvotes: 2
Reputation: 38825
Why not write yourself an extension method to do this?
public static class StringExtensionMethods
{
public static bool ContainsAny(this string self, params string[] toFind)
{
bool found = false;
foreach(var criteria in toFind)
{
if (self.Contains(criteria))
{
found = true;
break;
}
};
return found;
} // eo ContainsAny
}
Usage:
string[] systemsarray = new string[] { "as400", "x500", "mainframe" };
if(txt.ContainsAny(systemsarray))
{
systems++;
}
// error message: cannot convert from string[] to string
Upvotes: 5
Reputation: 564403
If you are looking for the existence of any of those words in the line, try:
if(systemsarray.Any(word => txt.Contains(word)))
{
users++;
}
Upvotes: 9