2009-11-29 87 views
49

Ho una pagina ASP.NET con una casella di testo multilinea denominata txbUserName. Poi ho incolla nel box 3 nomi e sono allineati verticalmente:Come dividere le stringhe sul ritorno a capo con C#?

  • Jason
  • Ammy
  • Karen

Voglio essere in grado di prendere in qualche modo i nomi e dividerli in separata stringhe ogni volta che rilevo il ritorno a capo o la nuova riga. Sto pensando che un array potrebbe essere la strada da percorrere. Qualche idea?

grazie.

risposta

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

Questo riguarda sia \ n e \ r \ n newline tipi e rimuove le righe vuote gli utenti possono entrare.

Ho provato utilizzando il seguente codice:

 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); 

e funziona correttamente, dividendosi in un array a tre stringhe con le voci "persona", "PersonB" e "PersonC".

+4

C'è una garanzia che questo non sarebbe prima divisa da \ n, lasciando \ r \ n \ r ridotto a? – spender

+0

Sono abbastanza sicuro che non lo farà. Uso questa linea nella mia app al lavoro e viene utilizzata per analizzare gli appunti uno alla volta (in qualche modo gli utenti hanno bisogno di terminazioni di linea UNIX su Windows ...). Tuttavia, se lo fa, immagino che l'inversione delle stringhe nell'argomento array di archi risolverebbe questo. Qualcuno sa come generare un mix dei due con cui testare? – jasonh

+7

@jasonh: "Sono abbastanza sicuro" ... famose ultime parole. :) –

4

Date un'occhiata alla funzione String.Split (non sono sicuro della sintassi esatta, non IDE davanti a me).

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

Environment.Newline è la rappresentazione "newline" dell'ambiente del server, non controlla ciò che l'utente può inserire, vero? –

+0

Se una costante potrebbe controllare ciò che l'utente potrebbe inserire, beh, comprerei più azioni Microsoft ... un * molto * di più. – TryCatch

+0

FWIW - è meglio usare "\ r" e/o "\ n", la mia risposta si concentra maggiormente sul "basta usare .split" per spezzare la stringa. Basta essere contento di non dover scrivere .split in C e gestire la memoria e gli indicatori da soli! I giovani whipper-snapper sono stati facili a dirtelo. – TryCatch

5

Sostituire le \r\n con \n, poi divisi con \n:

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

perché non usare 'new char [] {'\ n'}'? –

+0

@Matthew: le vecchie abitudini sono dure a morire: P –

+2

@Matthew, @ o.k.w: O anche solo usare 'Split ('\ n')' dato che l'array separatore è un parametro '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

Prova questa:

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

Opere se:

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

O

var message = "test 1\ntest 2"; 

O

var message = "test 1\rtest 2"; 
Problemi correlati