たとえば、StringBuilder
インスタンスを使用して、多数のsb.AppendLine("test");
を実行しています。
行数はどのように計算できますか?
クラスには.Length
しかし、それは全部でいくつの文字を私に教えてくれます。
何か案は?
効率で並べ替え:
最後のものは、非常に高価であり、lotsのゴミを生成します。使用しないでください。
StringBuilder
を独自のクラスでラップして、行が追加されたときに行数を維持するか、ビルダーがいっぱいになった後の '\ n'の数を維持することができます。
Regex.Matches(builder.ToString(), Environment.NewLine).Count
次のようにしてラッパークラスを作成できます。
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;
}
}
これを試して:
sb.ToString().Split(System.Environment.NewLine.ToCharArray()).Length;
[〜#〜] update [〜#〜]Gabeの発言
b.ToString()。Count(c => c == '\ n')もここで機能し、(文字列の個別のコピーを作成することを除いて)それほど効率的ではない可能性があります。
StringBuilderから文字列を作成して分割する(または文字列を作成してregex
ingする)よりも速い方法は、StringBuilderを調べて、そこにある'\n'
文字の数を数えることです。
次の拡張メソッドは、文字列ビルダーの文字を列挙します。コンテンツが完成するまでそれをlinqできます。
public static IEnumerable<char> GetEnumerator(this StringBuilder sb) { for (int i = 0; i < sb.Length; i++) yield return sb[i]; }
...ここで使用、カウントは4になります
StringBuilder b = new StringBuilder(); b.AppendLine("Hello\n"); b.AppendLine("World\n"); int lineCount = b.GetEnumerator().Count(c => c =='\n');
文字列内の\ nの出現回数を検索できるはずです。
更新:1つの方法は、改行文字で分割し、次のように配列の要素数をカウントすることです。
sb.ToString().Split('\n').length;
String.Split()を使用する場合は、いくつかのオプションで文字列を分割する必要があります。このような:
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();
}
これは次の結果になります:
Number of lines: 5
独自の行カウントStringBuilder
を導出します。ここで、AppendLine
は内部行カウントを増やし、行カウントの値を取得するメソッドを提供します。
正規表現を実行して、文字列内の行終了文字(例:\ r\n)の数をカウントします。または、文字列をテキストボックスに読み込んで行数を計算しますが、それはそれを行う方法です。
StringbuilderデータをString []配列に分割し、行数としてString []。Lengthを使用できます。
以下のようなもの:
String[] linestext = sb.Split(newline)
Console.Writeline(linetext.Length)