2009-03-11 8 views
28

Ho un programma in cui un array riceve i suoi dati utilizzando string.Slit (delimitatore char []). (utilizzando ';' come delimitatore.)Eliminazione di valori di stringa null/vuoti in un array C#

Alcuni valori, tuttavia, sono nulli. Cioè la stringa ha parti in cui non ci sono dati quindi fa qualcosa di simile:

1; 2; ; 3;

Questo porta al mio array con valori nulli.

Come sbarazzarsi di loro?

+0

Si dovrebbe modificare la tua domanda per rimuovere statali stringhe vuote nulla e solo. stringa.Split non fornisce stringhe nulle, solo vuote. – Samuel

risposta

101

Prova questa:

yourString.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries); 
+7

Che non viene compilato. Devi usare il nuovo char [] {';'} come primo parametro. – Guffa

+2

Una cosa da notare è che questo non rimuoverà stringhe costituite da soli spazi bianchi. – denver

+0

Non funziona come previsto. ex: var a = "1" + "," + "" + "," + "2" + "," + "" + "," + "3" + "," + "" + "," + null + "," + "4"; . a.Split (new char [] {','}, StringSplitOptions.RemoveEmptyEntries); . Console.WriteLine (a.ToString()); darà risultato di 1,, 2,, 3, ,, 4 – PSR

2

È possibile utilizzare il metodo di estensione LINQ Dove restituire solo i valori non nulli o vuoti.

string someString = "1;2;;3;"; 

IEnumerable<string> myResults = someString.Split(';').Where<string>(s => !string.IsNullOrEmpty(s)); 
+0

Si potrebbe eventualmente inserire un .Select (s => s.Trim()) tra Split e Where in modo che anche le stringhe di soli spazi vengano rimosse. –

+1

Nota: il metodo Dividi non produce mai valori nulli. – Guffa

+0

@TamasCzinege puoi usare string.IsNullOrWhiteSpaces invece di trim() – PSR

0

È necessario sostituire più punti e virgola adiacenti con un punto e virgola prima di dividere i dati.

Ciò sostituire due punti e virgola con un punto e virgola:

datastr = datastr.replace(";;",";"); 

Ma, se si dispone di più di due punti e virgola insieme, regex sarebbe meglio.

datastr = Regex.Replace(datastr, "([;][;]+)", ";"); 
2
public static string[] nullLessArray(string[] src) 
{ 
    Array.Sort(src); 
    Array.Reverse(src); 
    int index = Array.IndexOf(src, null); 

    string[] outputArray = new string[index]; 

    for (int counter = 0; counter < index; counter++) 
    { 
     outputArray[counter] = src[counter]; 
    } 

    return outputArray; 
} 
0
   words = poly[a].Split(charseparators, StringSplitOptions.RemoveEmptyEntries); 

       foreach (string word in words) 
        { 
         richTextBox1.Text += (d + 1)+ " " + word.Trim(',')+ "\r\n"; 
         d++; 
        } 

charseparators è uno spazio

Problemi correlati