2011-01-25 14 views
8

Come rimuoveresti l'elemento vuoto dall'array?come rimuovere la voce vuota dall'array

Iterare e assegnare elementi non vuoti al nuovo array?

String test = "John, Jane"; 

//Without using the test.Replace(" ", ""); 

String[] toList = test.Split(',', ' ', ';'); 
+1

Grazie per così tante prospettive, lo adoro. – Rod

risposta

26

Utilizzare il sovraccarico di string.Split che prende un StringSplitOptions:

String[] toList = test.Split(new []{',', ' ', ';'}, StringSplitOptions.RemoveEmptyEntries); 
+2

Devi amare SO - mai saputo di 'StringSplitOptions.RemoveEmptyEntries' :) – Oded

+0

molto bello grazie per quello – Rod

+0

@rod Lieto di essere di aiuto. Lo lascerò a te per implementare il caching dell'array delimitatore se lo chiamerai ripetutamente. –

0

Puoi metterli in una lista quindi chiamare il metodo toArray della lista, o con LINQ si potrebbe forse basta selezionare la non vuoto e fallo in array.

5

si usa the overload of string.Split which allows the suppression of empty items:

String test = "John, Jane"; 
String[] toList = test.Split(new char[] { ',', ' ', ';' }, 
          StringSplitOptions.RemoveEmptyEntries); 

O meglio, non si creerebbe una nuova matrice ogni volta:

private static readonly char[] Delimiters = { ',', ' ', ';' }; 
// Alternatively, if you find it more readable... 
// private static readonly char[] Delimiters = ", ;".ToCharArray(); 

... 

String[] toList = test.Split(Delimiters, StringSplitOptions.RemoveEmptyEntries); 

Split non modifica la lista, in modo che dovrebbe essere bene.

1
string[] result = toList.Where(c => c != ' ').ToArray(); 
+0

var result = toList.Where (c =>! String.IsNullOrEmpty (c)). ToArray(); – MvcCmsJon

0
string[] toList = test.Split(',', ' ', ';').Where(v => !string.IsNullOrEmpty(v.Trim())).ToArray(); 
+0

'''' causerà comunque 'string.IsNullOrEmpty' per restituire false. Se vuoi usare 'IsNullOrEmpty', dovresti prima fare' Trim() '. –

+0

@Justin buon punto. ho trascurato questo: P –

1

Prova questo fuori con un po 'di LINQ:

var n = Array.FindAll(test, str => str.Trim() != string.Empty); 
0

Se il separatore è seguito da uno spazio, solo è possibile includere nel separatore:

String[] toList = test.Split(
    new string[] { ", ", "; " }, 
    StringSplitOptions.None 
); 

Se il separatore si verifica anche senza lo spazio finale, è possibile includerli anche:

String[] toList = test.Split(
    new string[] { ", ", "; ", ",", ";" }, 
    StringSplitOptions.None 
); 

Nota: se la stringa contiene elementi veramente vuoti, verranno conservati. Cioè "Dirk, , Arthur" non darà lo stesso risultato di "Dirk, Arthur".

Problemi correlati