2009-11-13 10 views
86

Quiero dividir esta línea:¿Cómo puedo dividir y recortar una cadena en partes, todo en una sola línea?

string line = "First Name ; string ; firstName"; 

en una matriz de sus versiones recortadas:

"First Name" 
"string" 
"firstName" 

¿Cómo puedo hacer esto en una sola línea? El siguiente me da un error "no se puede convertir tipo void":

List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim()); 
+0

Creo que el título de la pregunta debería ser '¿Cómo puedo' en lugar de '¿Por qué puedo'? – rahul

+1

Se devuelve el error porque 'ForEach' funciona en la instancia actual de' IEnumerable' y devuelve 'void'. – Majkel

Respuesta

203

Trate

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList(); 

FYI, el método Foreach toma una acción (toma T y devuelve void) para el parámetro y su lambda devolver una cadena como cadena.Trim devolver una cadena

El método de extensión Foreach está destinado a modificar el estado de los objetos dentro de la colección. Como String son inmutables, esto no tendría efecto

creo que sirve; o)

Cédric

+3

Nota: 'ForEach' no es un método de extensión. – Guffa

+0

¡La mejor solución en Linq! – Sonhja

18

El método ForEach no devuelve nada, por lo que no se puede asignar a una variable que.

utilizar el método de Select extensión en su lugar:

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList(); 
4

Debido p.Trim() devuelve una nueva cadena.

Es necesario utilizar:

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList(); 
3

tratar esta alternativa:

string[] parts = Regex.Split(line, "\\s*;\\s*"); 
+0

Esta es una gran idea, sin embargo, creo que se pierden los espacios en blanco al final de la cadena, ¿correcto? – jrichview

1

Aquí es un método de extensión ...

public static string[] SplitAndTrim(this string text, char separator) 
    { 
     if (string.IsNullOrWhiteSpace(text)) 
     { 
      return null; 
     } 

     return text.Split(separator).Select(t => t.Trim()).ToArray(); 
    } 
2

trate de usar expresiones regulares:

List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList(); 
0

Uso Regex

string a="bob, jon,man; francis;luke; lee bob"; 
 
\t \t \t String pattern = @"[,;\s]"; 
 
      String[] elements = Regex.Split(a, pattern).Where(item=>!String.IsNullOrEmpty(item)).Select(item=>item.Trim()).ToArray();; \t \t \t 
 
      foreach (string item in elements){ 
 
       Console.WriteLine(item.Trim());

Resultado:

Bob

Jon

hombre

Francis

Lucas

Lee

Bob

patrón Explicar [,; \ s]: Al menos uno ocurrencia de cualquiera de los, ; o carácter de espacio

Cuestiones relacionadas