821 votes

Moyen le plus facile à découper une chaîne sur les sauts de ligne dans .net ?

<p>J’ai besoin de scinder une chaîne en sauts de ligne dans .NET et la seule façon que je connais pour fractionner des chaînes est avec la méthode Split. Cependant qui ne me permet pas (facilement) fractionner à un saut de ligne, donc ce qui est le meilleur moyen de le faire ?</p>

1434voto

Guffa Points 308133

À split, sur une chaîne, vous devez utiliser la surcharge qui prend un tableau de chaînes de caractères:

string[] lines = theText.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

Edit:
Si vous voulez gérer les différents types de sauts de ligne dans un texte, vous pouvez utiliser la capacité de correspondre à plus d'une corde. Ce sera correctement séparées sur un type de saut de ligne, et de préserver les lignes vides et de l'espacement dans le texte:

string[] lines = theText.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

122voto

Clément Points 1439

Que penser de l'utilisation d'un StringReader?

using (System.IO.StringReader reader = new System.IO.StringReader(input)) {
    string line = reader.ReadLine();
}

52voto

nikmd23 Points 5780

Vous devriez être en mesure de séparer votre chaîne assez facilement, comme suit:

aString.Split(Environment.NewLine.ToCharArray());

26voto

Erwin Mayer Points 3427

Basé sur Guffa réponse, dans une classe d'extension, utilisez:

public static string[] Lines(this string source) {
    return source.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}

10voto

Colonel Panic Points 18390

Pour une variable de chaîne s:

s.Split(new string[]{Environment.NewLine},StringSplitOptions.None)

Il utilise votre environnement de définition de fins de ligne. Sur Windows, les fins de ligne sont CR-LF (retour chariot, saut de ligne) ou en C#, s'échapper les caractères \r\n.

C'est une solution fiable, parce que si vous recombiner les lignes avec String.Join, ce qui correspond à votre chaîne d'origine:

var lines = s.Split(new string[]{Environment.NewLine},StringSplitOptions.None);
var reconstituted = String.Join(Environment.NewLine,lines);
Debug.Assert(s==reconstituted);

Quoi ne pas faire:

  • Utiliser StringSplitOptions.RemoveEmptyEntries, parce que cela va casser de balisage tels que Markdown où des lignes vides ont syntaxique but.
  • Split sur séparateur new char[]{Environment.NewLine}, parce que sous Windows, cela va créer une chaîne vide élément pour chaque nouvelle ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X