改行が含まれる文字列の行数を数えたくなって、C#のライブラリかなにかに入ってないかと期待して探したけど見つけきれなかった。
皆さん作っているんでしょうね。
まず最初に参考にしたのがここ。
・csharp > string > 改行の数のカウント > return s.Count( c => c == ‘\n’ ) + 1; > 遅いらしい
StackOverflowの記事を紹介してくれてます。
早速そのまま使ってみたら、行数を数えているんじゃなくて、改行の数を数えているんですね。
行数と改行数はちょっと違うんだよね。
aaaaaa\n
bbbbbb
上の例だと、改行数は1なんだけど行数は2。
この場合2と答えてほしいので、修正しました。
//行数を数える // 参考: https://stackoverflow.com/questions/2557002/what-is-the-fastest-way-to-count-newlines-in-a-large-net-string private static int getLineNum(string s) { int len = s.Length; int idxNewLine = 0; int c = 0; for (int i = 0; i <span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>< len; i++) { if (s[i] == '\n') { c++; idxNewLine = i; } } if(idxNewLine == len-1) { return c; //最終行が空行なら改行数を返す } else { return c + 1; //最終行に何かしら文字があれば、改行数に1行分足して返す } }
これで期待通り動いています。
せっかく作ったんだけど、これを使わずに処理したほうが処理コストは増えるけど入力データの仕様変更に耐えられると判断して、使うのを止めました。。
僕は今回使わないことにしたんだけど、他の誰か(将来の僕とか)の役に立てるようにおいておくね。