Perform Trim() while using Split()

citronas picture citronas · Dec 29, 2009 · Viewed 59.9k times · Source

today I was wondering if there is a better solution perform the following code sample.

string keyword = " abc, foo  ,     bar";
string match = "foo";
string[] split= keyword.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
foreach(string s in split)
{
  if(s.Trim() == match){// asjdklasd; break;}
}

Is there a way to perform trim() without manually iterating through each item? I'm looking for something like 'split by the following chars and automatically trim each result'.

Ah, immediatly before posting I found

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

in How can I split and trim a string into parts all on one line?

Still I'm curious: Might there be a better solution to this? (Or would the compiler probably convert them to the same code output as the Linq-Operation?)

Answer

Marc Gravell picture Marc Gravell · Dec 29, 2009

Another possible option (that avoids LINQ, for better or worse):

string line = " abc, foo  ,     bar";
string[] parts= Array.ConvertAll(line.Split(','), p => p.Trim());

However, if you just need to know if it is there - perhaps short-circuit?

bool contains = line.Split(',').Any(p => p.Trim() == match);