2009-11-29 24 views
49

Tengo una página ASP.NET con un cuadro de texto de líneas múltiples llamado txbUserName. Luego pegar en el cuadro de texto 3 nombres y que están alineados verticalmente:¿Cómo dividir las cadenas en el retorno de carro con C#?

  • Jason
  • Ammy
  • Karen

Quiero ser capaz de tomar alguna manera los nombres y los divide en separada cadenas cada vez que detecto el retorno de carro o la nueva línea. Estoy pensando que una matriz podría ser el camino a seguir. Alguna idea?

gracias.

Respuesta

111
string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries); 

Esto abarca tanto \ n como \ r \ n los tipos de nueva línea y elimina cualquier línea vacía que sus usuarios puedan ingresar.

he probado usando el siguiente código:

 string test = "PersonA\nPersonB\r\nPersonC\n"; 
     string[] result = test.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries); 
     foreach (string s in result) 
      Console.WriteLine(s); 

y funciona correctamente, dividiéndose en una matriz de tres cuerdas con las entradas "Persona", "PersonB" y "PersonC".

+4

¿Hay una garantía de que esto no es de primera división por \ n, dejando \ r \ n \ r reducido a? – spender

+0

Estoy bastante seguro de que no será así. Uso esta línea en mi aplicación en el trabajo y se usa para analizar el portapapeles de a uno por vez (de alguna manera los usuarios necesitan terminales de línea UNIX en Windows ...). Sin embargo, si lo hace, imagino que al invertir las cadenas en el argumento de matriz de cadena resolvería esto. ¿Alguien sabe cómo generar una mezcla de los dos para probar? – jasonh

+7

@jasonh: "Estoy bastante seguro" ... últimas palabras famosas. :) –

4

Tome un vistazo a la función String.split (no estoy seguro de la sintaxis exacta, sin IDE frente a mí).

string[] names = txbUserName.Text.Split(Environment.Newline); 
+2

Environment.Newline es la representación de "nueva línea" del entorno del servidor, no controla lo que el usuario puede ingresar, ¿o sí? –

+0

Si una constante pudiera controlar lo que el usuario podría ingresar, compraría más acciones de Microsoft ... mucho * más. – TryCatch

+0

FWIW: es mejor usar "\ r" y/o "\ n", mi respuesta se centra más en "solo usar .split" para romper la cadena. ¡Solo alégrate de no tener que escribir .split en C y administrar la memoria y los punteros tú mismo! Los jóvenes parásitos Whipper-snappers lo tienen fácil, te lo digo. – TryCatch

5

Reemplazar cualquier \r\n con \n, luego se separan utilizando \n:

string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray()); 
+0

¿por qué no usar 'new char [] {'\ n'}'? –

+0

@Matthew: los viejos hábitos se vuelven difíciles: P –

+2

@Matthew, @ o.k.w: O incluso simplemente use 'Split ('\ n')' ya que el conjunto separador es un parámetro 'params'. – LukeH

1
using System.Text; 
using System.Text.RegularExpressions; 


protected void btnAction_Click(object sender, EventArgs e) 
    { 
     string value = txtDetails.Text; 
     char[] delimiter = new char[] { ';','[' }; 
     string[] parts = value.Split(delimiter, StringSplitOptions.RemoveEmptyEntries); 
     for (int i = 0; i < parts.Length; i++) 
     { 
      txtFName.Text = parts[0].ToString(); 
      txtLName.Text = parts[1].ToString(); 
      txtAge.Text = parts[2].ToString(); 
      txtDob.Text = parts[3].ToString(); 
     } 
    } 
0

Prueba esto:

message.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 

funciona si:

var message = "test 1\r\ntest 2"; 

O

var message = "test 1\ntest 2"; 

O

var message = "test 1\rtest 2"; 
Cuestiones relacionadas