1

どうすればいいのかわかりません。現在、文字列の単語数を取得するためにスペースを数えていますが、スペースが2つあると、単語数が不正確になります。これを行うためのより良い方法はありますか?

4

4 に答える 4

4

@Martinv.Löwisの代替バージョン。これはaを使用し、他のカルチャforeachchar.IsWhiteSpace()扱う場合はより正確である必要があります。

int CountWithForeach(string para)
{
    bool inWord = false;
    int words = 0;
    foreach (char c in para)
    {
        if (char.IsWhiteSpace(c))
        {
            if( inWord )
                words++;
            inWord = false;
            continue;
        }
        inWord = true;
    }
    if( inWord )
        words++;

    return words;
}
于 2009-09-02T05:05:13.227 に答える
3

Splitに基づくソリューションは記述が短いですが、すべての文字列オブジェクトを作成して破棄する必要があるため、コストがかかる可能性があります。私は次のような明示的なアルゴリズムを期待します

  static int CountWords(string s)
  {
    int words = 0;
    bool inword = false;
    for(int i=0; i < s.Length; i++) {
      switch(s[i]) {
      case ' ':case '\t':case '\r':case '\n':
          if(inword)words++;
          inword = false;
          break;
      default:
          inword = true;
          break;
      }
    }
    if(inword)words++;
    return words;
  }

より効率的です(さらに、追加の空白文字を考慮することもできます)。

于 2009-09-02T04:14:49.773 に答える
2

これは私にとってはうまくいくようです:

var input = "This is a  test";
var count = input.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length;
于 2009-09-02T03:58:31.957 に答える
1

string.Splitを試してください:

string sentence = "This     is a sentence     with  some spaces.";
string[] words = sentence.Split(new char[] { ' ' },  StringSplitOptions.RemoveEmptyEntries);
int wordCount = words.Length;
于 2009-09-02T03:59:12.753 に答える