2010-09-09 8 views
5

¿Es posible guardar el valor de txtSearche en una matriz dividida en palabras separadas?¿Cómo dividir el valor del texto en una matriz con palabras en C#?

txtSearche = "put returns between paragraphs"; 

algo como esto:

StringBuilder sb = new StringBuilder(txtSearche); 

array1 = sb[1] = put 
array2 = sb[2] = returns 
array3 = sb[3] 
array4 = sb[4] 
array5 = sb[5] 

cómo hacerlo correcto?

Respuesta

18

Sí intente esto:

string[] words = txtSearche.Split(' '); 

que le dará:

words[0] = put 
words[1] = returns 
words[2] = between 
words[3] = paragraphs 

EDIT: también como Adkins menciones a continuación, la matriz palabras se creará a cualquier tamaño que se necesita por la cuerda que se proporciona. Si desea que la lista tenga un tamaño dinámico, yo diría que coloque la matriz en una lista usando List wordList = words.ToList();

EDIT: Nakul para dividir por un espacio o más, hay que añadirlas como parámetros en el método Split(), como a continuación:

txtSearche.Split(new string[] { " ", " ", " " }, StringSplitOptions.None); 

o se puede decir que simplemente dividir por un único espacio y hacer caso omiso entradas que están en blanco, causadas por espacios consecutivos, mediante el uso de la enumeración StringSplitOptions.RemoveEmptyEntries al igual que

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

También vale la pena mencionar que la matriz de palabras se creará para cualquier tamaño que necesite la cadena que se proporciona. Si desea que la lista tenga un tamaño dinámico, diría que coloque la matriz en una lista usando List wordList = words.ToList (); – Adkins

+0

@Adkins: gracias lo agregaré a la respuesta – w69rdy

+0

Quiero saber qué devuelve cuando espacios consecutivos en la cadena –

4

Puede usar String.Split.

+0

Y, sí, también hay un 'Join'. –

2

a continuación se repartirán ejemplo la cadena en una matriz con cada palabra como un elemento ...

cadena [] words = txtSearche.Split ('');

Puede encontrar más detalles here

2

Ninguno de trabajo anterior con múltiples espacios o nueva línea !!!

Esto es lo que trabaja con ellos:

string text = "hi!\r\nI am  a wonderful56 text... \r\nyeah..."; 
string[] words =Regex.Split(text, @"\s+", RegexOptions.Singleline); 

Si necesita eliminar puntos suspensivos entonces se requiere más procesamiento y me puede dar eso también.

ACTUALIZACIÓN

De hecho, este es mejor:

string text = "hi!\r\nI am  a wonderful56 text... \r\nyeah..."; 
MatchCollection matches = Regex.Matches(text, @"[\w\d_]+", RegexOptions.Singleline); 
foreach (Match match in matches) 
{ 
    if(match.Success) 
     Console.WriteLine(match.Value); 
    } 

salidas:

hi I am un texto wonderful56 sí

+0

Eso no es del todo cierto, 'String.Split' tiene una sobrecarga que toma una matriz de caracteres divididos y una opción para omitir las entradas vacías, por lo que podría usar 'text.Split (" \ t \ r \ n \ x85 \ xA0.,;:!?() - \ "". ToCharArray() , StringSplitOptions.RemoveEmptyEntries) '. Sin embargo, si va a hacer todo el recorrido de regex,' @ "\ W + (?

1
StringBuilder sb = new StringBuilder(txtSearche); 

var result = sb.Tostring().Split(' '); 
+0

'new StringBuilder (txt) .ToString()' = no- op –

0

Si desea una solución más completa y no se preocupe por el rendimiento, puede hacer que esta línea única se ocupe de la puntuación, etc. y le proporcione una selección de solo las palabras.

string[] words = Regex.Replace(Regex.Replace(text, "[^a-zA-Z0-9 ]", " "), @"\s+", " ").Split(' '); 
0
private void button1_Click(object sender, EventArgs e) 
{ 
    string s = textBox1.Text;    
    string[] words = s.Split(' ');   
    textBox2.Text = words[0]; 
    textBox3.Text = words[1]; 
} 
Cuestiones relacionadas