J'ai un StringBuilder
instance où je fais de nombreux sb.AppendLine("test");
par exemple.
Comment puis-je savoir combien de lignes j'ai?
Je vois la classe a .Length
Mais cela me dit combien de personnages de tous.
Des idées?
Trié par efficacité:
Le dernier est extraordinaire cher et génère lots des ordures, n'utilisez pas.
Vous pouvez envelopper StringBuilder
avec votre propre classe qui conserverait un nombre de lignes telles qu'elles sont ajoutées ou que le nombre de "\ N" après votre constructeur est plein.
Regex.Matches(builder.ToString(), Environment.NewLine).Count
Vous pouvez créer une classe wrapper procéder à ce qui suit:
public class Wrapper
{
private StringBuilder strBuild = null;
private int count = 0;
public Wrapper(){
strBuild = new StringBuilder();
}
public void AppendLine(String toAppendParam){
strBuild.AppendLine(toAppendParam);
count++;
}
public StringBuilder getStringBuilder(){
return strBuild;
}
public int getCount(){
return count;
}
}
Essaye ça:
sb.ToString().Split(System.Environment.NewLine.ToCharArray()).Length;
[~ # ~] Mise à jour [~ # ~]quelle gabe a dit
b.Tostring (). Compte (c => c == '\ n') fonctionnerait ici aussi, et pourrait ne pas être beaucoup moins efficace (en plus de créer une copie séparée de la chaîne!).
Un meilleur moyen, plus rapide que la création d'une chaîne du StringBuilder et le scinder (ou la création de la chaîne et regex
ing IT), est de regarder dans le StringBuilder et de compter le nombre de '\n'
caractères là-bas.
La méthode d'extension suivante énumérera via les caractères du constructeur de cordes, vous pouvez ensuite linq dessus jusqu'à ce que votre cœur soit contenu.
public static IEnumerable<char> GetEnumerator(this StringBuilder sb) { for (int i = 0; i < sb.Length; i++) yield return sb[i]; }
... Utilisé ici, le nombre sera 4
StringBuilder b = new StringBuilder(); b.AppendLine("Hello\n"); b.AppendLine("World\n"); int lineCount = b.GetEnumerator().Count(c => c =='\n');
Vous devriez être en mesure de rechercher le nombre de seventions de\n dans la chaîne.
Mise à jour: une solution pourrait être de se diviser sur le nouveau caractère et compter le nombre d'éléments de la matrice comme suit:
sb.ToString().Split('\n').length;
Si vous allez utiliser string.split (), vous devrez diviser la chaîne avec quelques options. Comme ça:
static void Main(string[] args)
{
var sb = new StringBuilder();
sb.AppendLine("this");
sb.AppendLine("is");
sb.AppendLine("a");
sb.AppendLine("test");
// StringSplitOptions.None counts the last (blank) newline
// which the last AppendLine call creates
// if you don't want this, then replace with
// StringSplitOptions.RemoveEmptyEntries
var lines = sb.ToString().Split(
new string[] {
System.Environment.NewLine },
StringSplitOptions.None).Length;
Console.WriteLine("Number of lines: " + lines);
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
Il en résulte:
Number of lines: 5
Dérivez votre propre ligne de comptage StringBuilder
où AppendLine
UPS Un nombre de lignes interne et fournit une méthode pour obtenir la valeur du nombre de lignes.
Faites une regex pour compter le nombre de terminateurs de ligne (ex:\r\n) dans la chaîne. Ou, chargez les chaînes dans une zone de texte et faites un compte de ligne, mais c'est la façon de le faire
Vous pouvez diviser les données de cordes de bulletin en grord [], puis utiliser la chaîne []. Longueur du nombre de lignes.
quelque chose comme ci-dessous:
String[] linestext = sb.Split(newline)
Console.Writeline(linetext.Length)