J'ai une page ASP.NET avec une zone de texte multiligne appelée txbUserName. Ensuite, je colle dans la zone de texte 3 les noms et ils sont alignés verticalement:
Je veux pouvoir en quelque sorte prendre les noms et les scinder en chaînes séparées chaque fois que je détecte le retour chariot ou la nouvelle ligne. Je pense qu'un tableau pourrait être la voie à suivre. Des idées?
je vous remercie.
string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
Ceci couvre à la fois les types de nouvelle ligne\n et\r\n et supprime les lignes vides que vos utilisateurs peuvent entrer.
J'ai testé en utilisant le code suivant:
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);
Et cela fonctionne correctement, en se divisant en un tableau de trois chaînes avec les entrées "PersonA", "PersonB" et "PersonC".
Remplacez tout \r\n
par \n
, puis divisez-le à l'aide de \n
:
string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray());
Jetez un coup d'œil à la fonction String.Split (pas sûr de la syntaxe exacte, pas de IDE devant moi).
string[] names = txbUserName.Text.Split(Environment.Newline);
mystring.Split(new Char[] { '\n' })
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();
}
}
Cela dépend de ce que vous voulez faire. Une autre option, qui est probablement excessive pour les petites listes, mais qui peut être plus efficace en termes de mémoire pour les grandes chaînes, consiste à utiliser la classe StringReader
et à utiliser un énumérateur:
IEnumerable<string> GetNextString(string input)
{
using (var sr = new StringReader(input))
{
string s;
while ((s = sr.ReadLine()) != null)
{
yield return s;
}
}
}
Ceci prend en charge les fins de ligne \n
et \r\n
. Comme il retourne un IEnumerable
, vous pouvez le traiter avec un foreach
ou utiliser l’une des extensions linq standard (ToList()
, ToArray()
, Where
, etc.).
Par exemple, avec foreach
:
var ss = "Hello\nworld\r\ntwo bags\r\nsugar";
foreach (var s in GetNextString(ss))
{
Console.WriteLine("==> {0}", s);
}
Essaye ça:
message.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Fonctionne si:
var message = "test 1\r\ntest 2";
Ou
var message = "test 1\ntest 2";
Ou
var message = "test 1\rtest 2";