Подтвердить что ты не робот

Любой лучший способ TRIM() после string.Split()?

Заметил некоторый код, например

string[] ary = parms.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
for( int i = 0; i < ary.Length; i++)
       ary[i] = ary[i].Trim();

работает нормально, но задается вопросом, есть ли лучший способ сделать это за один шаг.

4b9b3361

Ответ 1

string[] trimmedStrings = parms.Split(',')
                               .Select(s => s.Trim())
                               .Where(s => s != String.Empty)
                               .ToArray();

Кстати, рассмотрите использование типичного типизированного списка, например List<string>, а не устаревшего массива

IList<string> trimmedStrings = parms.Split(',')
                                    .Select(s => s.Trim())
                                    .Where(s => s != String.Empty)
                                    .ToList();

Ответ 2

Еще 2 шага, но без цикла

ary = ary.Select(str => str.Trim()).ToArray();

или

ary = ary.Split(',').Select(str => str.Trim())
                    .Where(str => str != string.Empty)
                    .ToArray();

Чтобы сохранить поведение RemoveEmptyEntries, а также удалить элементы, которые являются обрезаемыми

Ответ 3

Это довольно аккуратно:

//This could be inlined to the row below if you wanted
Regex oRE = new Regex(@"\s*\,\s*");
string TestString = ",, test , TEST 2   ,Test3";
//This is really the line you're looking for - the rest of the code just sets up an example
string[] Results = oRE.Split(TestString.Trim());
foreach(string S in Results){
    Console.WriteLine(">>" + S + "<<");
}

как однострочный:

string[] Results = new Regex(@"\s*\,\s*").Split(TestString.Trim());