どうすればいいのかわかりません。現在、文字列の単語数を取得するためにスペースを数えていますが、スペースが2つあると、単語数が不正確になります。これを行うためのより良い方法はありますか?
質問する
480 次
4 に答える
4
@Martinv.Löwisの代替バージョン。これはaを使用し、他のカルチャforeach
をchar.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 に答える