我想给我的程序一个文本并正确计算单词 我试图使用数组来保存单词:
string[] words = richTextBox1.Text.Split(' ');
但是这段代码有问题,它会计算文本中的空格 所以我尝试了以下代码:
string[] checkwords= richTextBox1.Text.Split(' ');
for (int i = 0; i < checkwords.Length; i++)
{
if (richTextBox1.Text.EndsWith(" ") )
{
return;
}
else
{
string[] words = richTextBox1.Text.Split(' ');
toolStripStatusLabel1.Text = "Words" + " = " + words.Length.ToString();
但现在它无法正常工作。
答案 0 :(得分:2)
我建议您使用'word boundary'锚
来Regex
使用\b
否则,您的代码可能无法正确考虑标签和新行等内容 - var words = Regex
.Split("hello world", @"\b")
.Where(s => !string.IsNullOrWhiteSpace(s));
var wordCount = words.Count();
将为您处理
{{1}}
答案 1 :(得分:1)
您可以使用String.Split
和StringSplitOptions.RemoveEmptyEntries
的重载来忽略多个连续的空格。
string text = "a b c d"; // 4 "words"
int words = text.Split(new char[]{}, StringSplitOptions.RemoveEmptyEntries).Length;
我使用空char[]
(您也可以使用new string[]{}
),因为这会考虑所有white-space characters,因此不仅' '
而且还有标签或新线字符。
答案 2 :(得分:0)
如果文本框以&#34;结尾,我不知道你为什么要返回。 &#34 ;.也许它应该是下一个或继续。
如果可能有多个空格。
Regex myRege = new Regex(@"[ ]{2,}");
string myText = regex.Replace(richTextBox1.Text, @" ");
string[] words= myText.Split(" ");
toolStripStatusLabel1.Text = "Words" + " = " + words.Length.ToString();
只是为了好玩
private string[] GetCount(string bodyText)
{
bodyText = bodyText.Replace(" "," ");
if(bodyText.Contains(" ")
GetCount(bodyText)
return bodyText.Split(' ');
}
string[] words = GetCount(richTextBox1.Text)
toolStripStatusLabel1.Text = "Words" + " = " + words.Length.ToString();