2011-12-09 9 views
10

zauważony jakiś kod, takich jakKażdy lepszy sposób na TRIM() po string.Split()?

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

działa dobrze, ale zastanawiam się, czy istnieje lepszy sposób to zrobić w jednym etapie

+0

Co to jest 'trim()'? – Oded

+1

@Dziękuję, literówka :) –

+1

@ Moo-Juice - Gosh, głupi mnie, oczekując, że opublikowany kod będzie kompilowany. – Oded

Odpowiedz

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

BTW, warto rozważyć użycie rodzajowego listę wpisywanych jak List<string> zamiast dotychczasowych tablic

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

Twój kod nie działa tak samo jak OP. Na przykład. ten ciąg ",,,,," ma zero pozycji w tablicy w kodzie OPs i 6 w twoich –

+8

"starszych tablicach"? 'Lista' NIE zastępuje' Tablicy'. –

+0

@Rune FS: dzięki za wskazanie tego, naprawiono – sll

2

jeszcze 2 etapów, lecz bez pętli

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

lub

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

Aby zachować zachowanie RemoveEmptyEntries a także usunąć elementy znajdujące trimable

2

to robi to całkiem zgrabnie:

//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 + "<<"); 
} 

jako jedną wkładką:

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

Twoja argumentacja byłaby silniejsza, gdybyś usunął swój przykładowy kod! Uczynienie tego 1-liniowcem byłoby miłe. –

+1

Jak sobie życzysz. Zaktualizowany i ma oba. =) – Dracorat