我知道有几个功能正常工作。一个只使用正则表达式计算文本框中的单词数,另一个使用正则表达式来计算同一文本框中特定单词(字符串)的实例。我确保这些都返回了预期的值。
但是,我显然搞砸了函数以某种方式填充我的数据网格,因为keywordcount总是返回零,密度也是如此。
这是我的代码:
public List<KeywordDensity> LoadCollectionData()
{
string thearticle = txtArticle.Text;
string[] keywordsarray = txtKeywords.Text.Split('\n');
bool isincluded = false;
int keywordcount = 0;
int thedensity = 0;
List<KeywordDensity> lsikeywords = new List<KeywordDensity>();
foreach (string s in keywordsarray)
{
if (s.Trim() != "")
{
keywordcount = KeywordCount(thearticle, s);
thedensity = keywordcount / WordCount(thearticle);
if (thearticle.Contains(s))
{
isincluded = true;
}
else
{
isincluded = false;
}
lsikeywords.Add(new KeywordDensity()
{
included = isincluded,
keyword = s,
occurences = keywordcount.ToString(),
density = thedensity.ToString()
});
}
}
return lsikeywords;
}
EDIT @ 8:30 AM MST :找出部分问题。使用“\ n”作为拆分字符无效。显然,它只是将整个事物“分裂”成一个大块,包括回车和提交。我将其更改为“\ r \ n”,现在至少“包含”和“Occurences”部分工作正常。
现在唯一的问题是“密度”无法正常工作。我意识到它不能被声明为int;但它仍然总是返回0 - 即使我将密度声明为浮点数或变量。
以下是否有问题?
thedensity = keywordcount / wordcount;
另外 - .ToString()函数是否会截断小数点加上过去的所有内容?例如,如果变量的值为0.43,它只会转换为0?如果不是这种情况,我应该使用哪种变量类型?我认为漂浮是合适的。
再次感谢!
编辑@ 8:45 MST :太糟糕了我不能接受多个答案。 '\ r'和var类型都是问题。我没有意识到你不能通过划分两个整数来计算浮点数。当我将源变量更改为浮点数并将密度变为var时,它也起作用。
谢谢!
-Sootah
答案 0 :(得分:1)
你用整数计算。 WordCount听起来像一个大数字,关键字不是。也许这就是为什么你没有期望的结果呢?
另一个问题,如果WordCount返回零怎么办?这将抛出异常。这是否永远不会发生(假设不是,但是吗?)?如果在绑定中抛出异常,应用程序将不会挂起但结果将为false。
答案 1 :(得分:1)
我会在这里改变一些事情。首先是重新分配关键字以确保没有附加空格:
foreach (string s in keywordsarray)
{
string key_word = s.Trim();
if (key_word != "")
{
// Replace all uses of s with key_word
if(thearticle.Contains(key_word))
// ...
其次是直接分配isincluded
:
isincluded = thearticle.Contains(key_word);
然后我会确保txtKeywords
实际上是由换行符分隔的列表:
// Is this really strings separated by newlines?
string[] keywordsarray = txtKeywords.Text.Split('\n');
答案 2 :(得分:1)
是的,SwDevMan81有一个好处 - 确保keywordsarray []实际上有一些单词。
我很确定如果用户键入Silverlight文本框,则分隔符为'\ r'(至少我知道我看到它的行为方式)。
使用正则表达式进行拆分可能会更好。
答案 3 :(得分:0)
关键在于你在哪里填写这些数据?对LoadCollectionData
的调用应该在您的代码的构造函数中,因为您使用的是List,否则请使用ObservableCollection
。另外,发布Grid的XAML也会有所帮助。