2009-03-11 7 views
28

Tengo un programa donde una matriz obtiene sus datos mediante una cadena. División (delimitador char []). (usando ';' como delimitador)Deshacerse de los valores de cadena nula/vacía en una matriz C#

Algunos de los valores, sin embargo, son nulos. Es decir. la cadena tiene partes donde no hay datos por lo que hace algo como esto:

1; 2; ; 3;

Esto lleva a que mi matriz tenga valores nulos.

¿Cómo me deshago de ellos?

+0

Debe editar la pregunta para eliminar las cadenas vacías estado nulo y sólo. string.Split no da cadenas nulas, solo vacías. – Samuel

Respuesta

101

Prueba esto:

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

Eso no se compila. Necesita usar la nueva char [] {';'} como primer parámetro. – Guffa

+2

Una cosa a tener en cuenta es que esto no eliminará las cadenas que consisten solo en espacios en blanco. – denver

+0

No funciona como se esperaba. ex: var a = "1" + "," + "" + "," + "2" + "," + "" + "," + "3" + "," + "" + "," + null + "," + "4"; . a.Split (nuevo char [] {','}, StringSplitOptions.RemoveEmptyEntries); . Console.WriteLine (a.ToString()); dará resultado de 1, 2, 3, ,, 4 – PSR

2

Se puede usar el método de extensión LINQ Cuando sólo para devolver los valores no nulos o vacíos.

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

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

. Posiblemente podría insertar un .Seleccione (s => s.Trim()) entre Dividir y Dónde para que también se eliminen las cadenas de solo espacio en blanco. –

+1

Nota: El método Split nunca produce valores nulos. – Guffa

+0

@TamasCzinege puede usar string.IsNullOrWhiteSpaces en lugar de trim() – PSR

0

Debe reemplazar múltiples puntos y coma adyacentes con un punto y coma antes de dividir los datos.

Esto reemplazar dos puntos y comas con un punto y coma:

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

Pero, si usted tiene más de dos puntos y comas juntos, expresión regular sería mejor.

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 es un espacio

Cuestiones relacionadas